]> gitweb.factorcode.org Git - factor.git/commitdiff
handle seeking before the file start on windows, add a unit test for this
authorDoug Coleman <doug.coleman@gmail.com>
Mon, 9 Feb 2009 02:18:30 +0000 (20:18 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Mon, 9 Feb 2009 02:18:30 +0000 (20:18 -0600)
basis/io/backend/windows/nt/nt.factor
core/io/files/files-tests.factor

index 107f1902e315a063937b4300a66ac248fe070fea..6f283ac1bb9bfdd0b229b5d3706e3b5926b18b02 100755 (executable)
@@ -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 ;
 
index d7fc3851e2652342cbd5a8271b86d36f98073a85..152d1bb85d228b65953df779f182979ed72693a1 100644 (file)
@@ -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