From 8f1ee76193d240364c9af9d46c08af47d078b9af Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 9 Apr 2005 04:09:49 +0000 Subject: [PATCH] unix ffi i/o copy task works --- library/io/buffer.factor | 7 ++++++- library/test/io/buffer.factor | 7 +++++++ library/unix/io.factor | 13 +++++-------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/library/io/buffer.factor b/library/io/buffer.factor index 1035c35d8c..6e2a93e54b 100644 --- a/library/io/buffer.factor +++ b/library/io/buffer.factor @@ -15,7 +15,7 @@ TUPLE: buffer size ptr fill pos ; "int" "libc" "realloc" [ "ulong" "ulong" ] alien-invoke ; : imemcpy ( dst src size -- ) - "void" "libc" "realloc" [ "ulong" "ulong" "ulong" ] alien-invoke ; + "void" "libc" "memcpy" [ "ulong" "ulong" "ulong" ] alien-invoke ; C: buffer ( size -- buffer ) 2dup set-buffer-size @@ -92,6 +92,11 @@ C: buffer ( size -- buffer ) [ buffer@ 0 alien-unsigned-1 1 ] keep buffer-consume ; +: buffer-append ( buffer buffer -- ) + #! Append first buffer to second buffer. + 2dup buffer-end over buffer-ptr rot buffer-fill imemcpy + >r buffer-fill r> n>buffer ; + : buffer-set ( string buffer -- ) 2dup buffer-ptr string>memory >r string-length r> buffer-reset ; diff --git a/library/test/io/buffer.factor b/library/test/io/buffer.factor index b7fac87a12..2106c08682 100644 --- a/library/test/io/buffer.factor +++ b/library/test/io/buffer.factor @@ -36,3 +36,10 @@ USING: kernel io-internals test ; "hello" string>buffer 1 over buffer-consume [ buffer-pop ] keep buffer-free ] unit-test + +[ "Hello world" ] [ + " world" string>buffer + "Hello" string>buffer + 2dup buffer-append + [ buffer-contents ] keep buffer-free swap buffer-free +] unit-test diff --git a/library/unix/io.factor b/library/unix/io.factor index 77cb27817c..dc92421f34 100644 --- a/library/unix/io.factor +++ b/library/unix/io.factor @@ -3,6 +3,10 @@ IN: io-internals USING: errors generic kernel math sequences strings ; +FORGET: can-read-line? +FORGET: can-read-count? +FORGET: can-write? + : file-mode OCT: 0600 ; : io-error ( n -- ) 0 < [ errno strerror throw ] when ; @@ -14,10 +18,6 @@ USING: errors generic kernel math sequences strings ; O_WRONLY O_CREAT bitor O_TRUNC bitor file-mode sys-open dup io-error ; -FORGET: can-read-line? -FORGET: can-read-count? -FORGET: can-write? - TUPLE: port handle buffer error ; C: port ( handle buffer -- port ) @@ -155,16 +155,13 @@ C: writer ( fd -- writer ) : can-copy? ( from -- ? ) dup eof? [ read-step ] [ drop t ] ifte ; -: copy-from-step ( from to -- ) - >r dup buffer-ptr swap buffer-fill r> buffer@ -rot imemcpy ; - : copy-from-task ( from to -- ? ) over can-copy? [ over eof? [ 2drop t ] [ over buffer-fill over can-write? [ - dupd copy-from-step 0 swap buffer-reset + dupd buffer-append 0 swap buffer-reset ] [ 2drop ] ifte f