Commit a1a69f24c8

Jimmi Holst Christensen <rainbowhejsil@gmail.com>
2018-01-19 22:05:56
We now make a more correct conversion from windows LARGE_INTEGER type to usize
1 parent 6149789
Changed files (1)
std
std/io.zig
@@ -48,6 +48,7 @@ error PathNotFound;
 error OutOfMemory;
 error Unseekable;
 error EndOfFile;
+error FilePosLargerThanPointerRange;
 
 pub fn getStdErr() -> %File {
     const handle = if (is_windows)
@@ -266,8 +267,8 @@ pub const File = struct {
                 return result;
             },
             Os.windows => {
-                var pos : usize = undefined;
-                if (system.SetFilePointerEx(self.handle, 0, @ptrCast(system.PLARGE_INTEGER, &pos), system.FILE_CURRENT) == 0) {
+                var pos : system.LARGE_INTEGER = undefined;
+                if (system.SetFilePointerEx(self.handle, 0, &pos, system.FILE_CURRENT) == 0) {
                     const err = system.GetLastError();
                     return switch (err) {
                         system.ERROR.INVALID_PARAMETER => error.BadFd,
@@ -275,7 +276,12 @@ pub const File = struct {
                     };
                 }
 
-                return pos;
+                assert(pos >= 0);
+                if (pos > @maxValue(usize)) {
+                    return error.FilePosLargerThanPointerRange;
+                }
+
+                return usize(pos);
             },
             else => @compileError("unsupported OS"),
         }