handle seeking before the file start on windows, add a unit test for this
parent
1818ea5136
commit
b529df9652
|
|
@ -87,11 +87,16 @@ ERROR: invalid-file-size n ;
|
|||
: handle>file-size ( handle -- n )
|
||||
0 <ulonglong> [ GetFileSizeEx win32-error=0/f ] keep *ulonglong ;
|
||||
|
||||
ERROR: seek-before-start n ;
|
||||
|
||||
: set-seek-ptr ( n handle -- )
|
||||
[ dup 0 < [ seek-before-start ] when ] dip (>>ptr) ;
|
||||
|
||||
M: winnt seek-handle ( n seek-type handle -- )
|
||||
swap {
|
||||
{ seek-absolute [ (>>ptr) ] }
|
||||
{ seek-relative [ [ + ] change-ptr drop ] }
|
||||
{ seek-end [ [ handle>> handle>file-size + ] keep (>>ptr) ] }
|
||||
{ seek-absolute [ set-seek-ptr ] }
|
||||
{ seek-relative [ [ ptr>> + ] keep set-seek-ptr ] }
|
||||
{ seek-end [ [ handle>> handle>file-size + ] keep set-seek-ptr ] }
|
||||
[ bad-seek-type ]
|
||||
} case ;
|
||||
|
||||
|
|
|
|||
|
|
@ -138,3 +138,9 @@ USE: debugger.threads
|
|||
] with-file-reader
|
||||
] 2bi
|
||||
] unit-test
|
||||
|
||||
[
|
||||
"seek-test6" unique-file binary [
|
||||
-10 seek-absolute seek-input
|
||||
] with-file-reader
|
||||
] must-fail
|
||||
|
|
|
|||
Loading…
Reference in New Issue