Remove eof slot
parent
4d10baef3d
commit
a58ebeabdc
|
@ -65,10 +65,6 @@ HELP: wait-to-read
|
||||||
{ $values { "port" input-port } }
|
{ $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." } ;
|
{ $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?
|
HELP: can-write?
|
||||||
{ $values { "len" "a positive integer" } { "buffer" buffer } { "?" "a boolean" } }
|
{ $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." } ;
|
{ $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>
|
<port>
|
||||||
default-buffer-size get <buffer> >>buffer ; inline
|
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> ( handle -- input-port )
|
||||||
input-port <buffered-port> ;
|
input-port <buffered-port> ;
|
||||||
|
|
||||||
HOOK: (wait-to-read) io-backend ( port -- )
|
HOOK: (wait-to-read) io-backend ( port -- )
|
||||||
|
|
||||||
: wait-to-read ( port -- )
|
: wait-to-read ( port -- eof? )
|
||||||
dup buffer>> buffer-empty? [ (wait-to-read) ] [ drop ] if ;
|
dup buffer>> buffer-empty? [
|
||||||
|
dup (wait-to-read) buffer>> buffer-empty?
|
||||||
: unless-eof ( port quot -- value )
|
] [ drop f ] if ;
|
||||||
>r dup buffer>> buffer-empty? over eof>> and
|
|
||||||
[ f >>eof drop f ] r> if ; inline
|
|
||||||
|
|
||||||
M: input-port stream-read1
|
M: input-port stream-read1
|
||||||
dup check-disposed
|
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 )
|
: read-step ( count port -- byte-array/f )
|
||||||
[ wait-to-read ] keep
|
dup wait-to-read [ 2drop f ] [ buffer>> buffer-read ] if ;
|
||||||
[ dupd buffer>> buffer-read ] unless-eof nip ;
|
|
||||||
|
|
||||||
M: input-port stream-read-partial ( max stream -- byte-array/f )
|
M: input-port stream-read-partial ( max stream -- byte-array/f )
|
||||||
dup check-disposed
|
dup check-disposed
|
||||||
|
|
|
@ -108,9 +108,6 @@ M: io-timeout summary drop "I/O operation timed out" ;
|
||||||
: io-error ( n -- ) 0 < [ (io-error) ] when ;
|
: io-error ( n -- ) 0 < [ (io-error) ] when ;
|
||||||
|
|
||||||
! Readers
|
! Readers
|
||||||
: eof ( reader -- )
|
|
||||||
dup buffer>> buffer-empty? [ t >>eof ] when drop ;
|
|
||||||
|
|
||||||
: (refill) ( port -- n )
|
: (refill) ( port -- n )
|
||||||
[ handle>> ]
|
[ handle>> ]
|
||||||
[ buffer>> buffer-end ]
|
[ buffer>> buffer-end ]
|
||||||
|
@ -123,8 +120,7 @@ GENERIC: refill ( port handle -- event/f )
|
||||||
M: fd refill
|
M: fd refill
|
||||||
fd>> over buffer>> [ buffer-end ] [ buffer-capacity ] bi read
|
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 EINTR = ] [ 2drop +retry+ ] }
|
||||||
{ [ err_no EAGAIN = ] [ 2drop +input+ ] }
|
{ [ err_no EAGAIN = ] [ 2drop +input+ ] }
|
||||||
[ (io-error) ]
|
[ (io-error) ]
|
||||||
|
|
|
@ -111,7 +111,7 @@ M: linux-monitor dispose* ( monitor -- )
|
||||||
|
|
||||||
: inotify-read-loop ( port -- )
|
: inotify-read-loop ( port -- )
|
||||||
dup check-disposed
|
dup check-disposed
|
||||||
dup wait-to-read
|
dup wait-to-read drop
|
||||||
0 over buffer>> parse-file-notifications
|
0 over buffer>> parse-file-notifications
|
||||||
0 over buffer>> buffer-reset
|
0 over buffer>> buffer-reset
|
||||||
inotify-read-loop ;
|
inotify-read-loop ;
|
||||||
|
|
|
@ -30,7 +30,7 @@ M: ssl-handle handle-fd file>> handle-fd ;
|
||||||
check-response
|
check-response
|
||||||
{
|
{
|
||||||
{ SSL_ERROR_NONE [ swap buffer>> n>buffer f ] }
|
{ 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_READ [ 2drop +input+ ] }
|
||||||
{ SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
|
{ SSL_ERROR_WANT_WRITE [ 2drop +output+ ] }
|
||||||
{ SSL_ERROR_SYSCALL [ syscall-error ] }
|
{ SSL_ERROR_SYSCALL [ syscall-error ] }
|
||||||
|
|
|
@ -110,11 +110,7 @@ M: winnt (wait-to-write)
|
||||||
] with-destructors ;
|
] with-destructors ;
|
||||||
|
|
||||||
: finish-read ( n port -- )
|
: finish-read ( n port -- )
|
||||||
over zero? [
|
[ update-file-ptr ] [ buffer>> n>buffer ] 2bi ;
|
||||||
t >>eof 2drop
|
|
||||||
] [
|
|
||||||
[ buffer>> n>buffer ] [ update-file-ptr ] 2bi
|
|
||||||
] if ;
|
|
||||||
|
|
||||||
M: winnt (wait-to-read) ( port -- )
|
M: winnt (wait-to-read) ( port -- )
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue