From a1a69f24c846fdd8a7682216c383df53963b5b3b Mon Sep 17 00:00:00 2001 From: Jimmi Holst Christensen Date: Fri, 19 Jan 2018 22:05:56 +0100 Subject: [PATCH] We now make a more correct conversion from windows LARGE_INTEGER type to usize --- std/io.zig | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/std/io.zig b/std/io.zig index 4367db78b1..2d20e17168 100644 --- a/std/io.zig +++ b/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"), }