clean up stream-seek with some suggestions from slava
parent
aa6166adf2
commit
16312f6711
|
@ -46,14 +46,14 @@ M: fd cancel-operation ( fd -- )
|
|||
2bi
|
||||
] if ;
|
||||
|
||||
M: unix (stream-seek) ( n seek-type stream -- )
|
||||
M: unix seek-handle ( n seek-type handle -- )
|
||||
swap {
|
||||
{ io:seek-absolute [ SEEK_SET ] }
|
||||
{ io:seek-relative [ SEEK_CUR ] }
|
||||
{ io:seek-end [ SEEK_END ] }
|
||||
[ io:bad-seek-type ]
|
||||
} case
|
||||
[ handle>> fd>> swap ] dip lseek io-error ;
|
||||
[ fd>> swap ] dip lseek io-error ;
|
||||
|
||||
SYMBOL: +retry+ ! just try the operation again without blocking
|
||||
SYMBOL: +input+
|
||||
|
|
|
@ -87,11 +87,11 @@ ERROR: invalid-file-size n ;
|
|||
: handle>file-size ( handle -- n )
|
||||
0 <ulonglong> [ GetFileSizeEx win32-error=0/f ] keep *ulonglong ;
|
||||
|
||||
M: winnt (stream-seek) ( n seek-type stream -- )
|
||||
M: winnt seek-handle ( n seek-type handle -- )
|
||||
swap {
|
||||
{ seek-absolute [ handle>> (>>ptr) ] }
|
||||
{ seek-relative [ handle>> [ + ] change-ptr drop ] }
|
||||
{ seek-end [ handle>> [ handle>> handle>file-size + ] keep (>>ptr) ] }
|
||||
{ seek-absolute [ (>>ptr) ] }
|
||||
{ seek-relative [ [ + ] change-ptr drop ] }
|
||||
{ seek-end [ [ handle>> handle>file-size + ] keep (>>ptr) ] }
|
||||
[ bad-seek-type ]
|
||||
} case ;
|
||||
|
||||
|
|
|
@ -21,9 +21,6 @@ M: buffer dispose* ptr>> free ;
|
|||
: buffer-reset ( n buffer -- )
|
||||
swap >>fill 0 >>pos drop ;
|
||||
|
||||
: buffer-reset-hard ( buffer -- )
|
||||
0 >>fill 0 >>pos drop ;
|
||||
|
||||
: buffer-capacity ( buffer -- n )
|
||||
[ size>> ] [ fill>> ] bi - ; inline
|
||||
|
||||
|
|
|
@ -120,12 +120,17 @@ M: output-port stream-write
|
|||
|
||||
HOOK: (wait-to-write) io-backend ( port -- )
|
||||
|
||||
HOOK: (stream-seek) os ( n seek-type stream -- )
|
||||
HOOK: seek-handle os ( n seek-type handle -- )
|
||||
|
||||
M: port stream-seek ( n seek-type stream -- )
|
||||
dup check-disposed
|
||||
[ buffer>> buffer-reset-hard 2drop ] [ (stream-seek) ] 3bi ;
|
||||
M: input-port stream-seek ( n seek-type stream -- )
|
||||
[ check-disposed ]
|
||||
[ buffer>> 0 swap buffer-reset ]
|
||||
[ handle>> seek-handle ] tri ;
|
||||
|
||||
M: output-port stream-seek ( n seek-type stream -- )
|
||||
[ check-disposed ]
|
||||
[ stream-flush ]
|
||||
[ handle>> seek-handle ] tri ;
|
||||
|
||||
GENERIC: shutdown ( handle -- )
|
||||
|
||||
|
|
Loading…
Reference in New Issue