Remove eof slot
parent
4d10baef3d
commit
a58ebeabdc
|
@ -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." } ;
|
||||
|
|
|
@ -25,27 +25,24 @@ TUPLE: buffered-port < port buffer ;
|
|||
<port>
|
||||
default-buffer-size get <buffer> >>buffer ; inline
|
||||
|
||||
TUPLE: input-port < buffered-port eof ;
|
||||
TUPLE: input-port < buffered-port ;
|
||||
|
||||
: <input-port> ( handle -- input-port )
|
||||
input-port <buffered-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
|
||||
|
|
|
@ -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) ]
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ] }
|
||||
|
|
|
@ -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 -- )
|
||||
[
|
||||
|
|
Loading…
Reference in New Issue