From a58ebeabdc541c36cb862fb29dcf7a4ba9a95dd1 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 18 May 2008 19:02:50 -0500 Subject: [PATCH] Remove eof slot --- extra/io/ports/ports-docs.factor | 4 ---- extra/io/ports/ports.factor | 17 +++++++---------- extra/io/unix/backend/backend.factor | 6 +----- extra/io/unix/linux/monitors/monitors.factor | 2 +- extra/io/unix/sockets/secure/secure.factor | 2 +- extra/io/windows/nt/backend/backend.factor | 6 +----- 6 files changed, 11 insertions(+), 26 deletions(-) diff --git a/extra/io/ports/ports-docs.factor b/extra/io/ports/ports-docs.factor index 40890e877b..38e9da2d56 100755 --- a/extra/io/ports/ports-docs.factor +++ b/extra/io/ports/ports-docs.factor @@ -65,10 +65,6 @@ HELP: wait-to-read { $values { "port" input-port } } { $description "If the port's buffer has unread data, returns immediately, otherwise suspends the current thread until some data is available for reading." } ; -HELP: unless-eof -{ $values { "port" input-port } { "quot" "a quotation with stack effect " { $snippet "( port -- value )" } } { "value" object } } -{ $description "If the port has reached end of file, outputs " { $link f } ", otherwise applies the quotation to the port." } ; - HELP: can-write? { $values { "len" "a positive integer" } { "buffer" buffer } { "?" "a boolean" } } { $description "Tests if the port's output buffer can accomodate " { $snippet "len" } " bytes. If the buffer is empty, this always outputs " { $link t } ", since in that case the buffer will be grown automatically." } ; diff --git a/extra/io/ports/ports.factor b/extra/io/ports/ports.factor index 043644bb45..b82797354f 100755 --- a/extra/io/ports/ports.factor +++ b/extra/io/ports/ports.factor @@ -25,27 +25,24 @@ TUPLE: buffered-port < port buffer ; default-buffer-size get >>buffer ; inline -TUPLE: input-port < buffered-port eof ; +TUPLE: input-port < buffered-port ; : ( handle -- input-port ) input-port ; HOOK: (wait-to-read) io-backend ( port -- ) -: wait-to-read ( port -- ) - dup buffer>> buffer-empty? [ (wait-to-read) ] [ drop ] if ; - -: unless-eof ( port quot -- value ) - >r dup buffer>> buffer-empty? over eof>> and - [ f >>eof drop f ] r> if ; inline +: wait-to-read ( port -- eof? ) + dup buffer>> buffer-empty? [ + dup (wait-to-read) buffer>> buffer-empty? + ] [ drop f ] if ; M: input-port stream-read1 dup check-disposed - dup wait-to-read [ buffer>> buffer-pop ] unless-eof ; + dup wait-to-read [ drop f ] [ buffer>> buffer-pop ] if ; : read-step ( count port -- byte-array/f ) - [ wait-to-read ] keep - [ dupd buffer>> buffer-read ] unless-eof nip ; + dup wait-to-read [ 2drop f ] [ buffer>> buffer-read ] if ; M: input-port stream-read-partial ( max stream -- byte-array/f ) dup check-disposed diff --git a/extra/io/unix/backend/backend.factor b/extra/io/unix/backend/backend.factor index 06fe830365..8f5b6c7540 100755 --- a/extra/io/unix/backend/backend.factor +++ b/extra/io/unix/backend/backend.factor @@ -108,9 +108,6 @@ M: io-timeout summary drop "I/O operation timed out" ; : io-error ( n -- ) 0 < [ (io-error) ] when ; ! Readers -: eof ( reader -- ) - dup buffer>> buffer-empty? [ t >>eof ] when drop ; - : (refill) ( port -- n ) [ handle>> ] [ buffer>> buffer-end ] @@ -123,8 +120,7 @@ GENERIC: refill ( port handle -- event/f ) M: fd refill fd>> over buffer>> [ buffer-end ] [ buffer-capacity ] bi read { - { [ dup 0 = ] [ drop eof f ] } - { [ dup 0 > ] [ swap buffer>> n>buffer f ] } + { [ dup 0 >= ] [ swap buffer>> n>buffer f ] } { [ err_no EINTR = ] [ 2drop +retry+ ] } { [ err_no EAGAIN = ] [ 2drop +input+ ] } [ (io-error) ] diff --git a/extra/io/unix/linux/monitors/monitors.factor b/extra/io/unix/linux/monitors/monitors.factor index 136a892aa6..562e12699c 100644 --- a/extra/io/unix/linux/monitors/monitors.factor +++ b/extra/io/unix/linux/monitors/monitors.factor @@ -111,7 +111,7 @@ M: linux-monitor dispose* ( monitor -- ) : inotify-read-loop ( port -- ) dup check-disposed - dup wait-to-read + dup wait-to-read drop 0 over buffer>> parse-file-notifications 0 over buffer>> buffer-reset inotify-read-loop ; diff --git a/extra/io/unix/sockets/secure/secure.factor b/extra/io/unix/sockets/secure/secure.factor index a466ab2c03..ffd202dc0e 100755 --- a/extra/io/unix/sockets/secure/secure.factor +++ b/extra/io/unix/sockets/secure/secure.factor @@ -30,7 +30,7 @@ M: ssl-handle handle-fd file>> handle-fd ; check-response { { SSL_ERROR_NONE [ swap buffer>> n>buffer f ] } - { SSL_ERROR_ZERO_RETURN [ drop eof f ] } + { SSL_ERROR_ZERO_RETURN [ 2drop f ] } { SSL_ERROR_WANT_READ [ 2drop +input+ ] } { SSL_ERROR_WANT_WRITE [ 2drop +output+ ] } { SSL_ERROR_SYSCALL [ syscall-error ] } diff --git a/extra/io/windows/nt/backend/backend.factor b/extra/io/windows/nt/backend/backend.factor index 73f4688ac9..5cc0751c55 100755 --- a/extra/io/windows/nt/backend/backend.factor +++ b/extra/io/windows/nt/backend/backend.factor @@ -110,11 +110,7 @@ M: winnt (wait-to-write) ] with-destructors ; : finish-read ( n port -- ) - over zero? [ - t >>eof 2drop - ] [ - [ buffer>> n>buffer ] [ update-file-ptr ] 2bi - ] if ; + [ update-file-ptr ] [ buffer>> n>buffer ] 2bi ; M: winnt (wait-to-read) ( port -- ) [