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