diff --git a/core/alien/strings/strings-tests.factor b/core/alien/strings/strings-tests.factor index 10cf75f81a..484809469f 100644 --- a/core/alien/strings/strings-tests.factor +++ b/core/alien/strings/strings-tests.factor @@ -1,5 +1,6 @@ USING: alien.strings tools.test kernel libc -io.encodings.8-bit io.encodings.utf16 io.encodings.ascii alien ; +io.encodings.8-bit io.encodings.utf8 io.encodings.utf16 +io.encodings.ascii alien ; IN: alien.strings.tests [ "\u0000ff" ] @@ -26,3 +27,4 @@ unit-test dup utf16n alien>string swap free ] unit-test +[ f ] [ f utf8 alien>string ] unit-test diff --git a/core/alien/strings/strings.factor b/core/alien/strings/strings.factor index 1c15ac8284..6fb506c461 100644 --- a/core/alien/strings/strings.factor +++ b/core/alien/strings/strings.factor @@ -6,10 +6,15 @@ io.streams.byte-array io.streams.memory io.encodings.utf8 io.encodings.utf16 system alien strings cpu.architecture ; IN: alien.strings -: alien>string ( alien encoding -- string ) +GENERIC# alien>string 1 ( alien encoding -- string/f ) + +M: c-ptr alien>string >r r> "\0" swap stream-read-until drop ; +M: f alien>string + drop ; + ERROR: invalid-c-string string ; : check-string ( string -- )