clean up stream-seek with some suggestions from slava

db4
Doug Coleman 2009-02-08 10:35:30 -06:00
parent aa6166adf2
commit 16312f6711
4 changed files with 15 additions and 13 deletions

View File

@ -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+

View File

@ -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 ;

View File

@ -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

View File

@ -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 -- )