authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-04 15:20:42-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2019-05-04 15:20:42-04:00
log5d347c01cf2942f7c04277242b440ceb695b3213
tree6c962a837b5f81588af0caaf587dbb0cc909ddee
parent6a34da963b4712da7fa20079e6ab557455ffe4bf
parent077216b58205fc3fa4920a6e2cbcf9565b2c7116
signature Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #2374 from LemonBoy/fileszoff-reform

Make io offsets/sizes u64 instead of usize

4 files changed, 30 insertions(+), 33 deletions(-)

std/io.zig+3-3
......@@ -195,8 +195,8 @@ pub fn InStream(comptime ReadError: type) type {
195195 return mem.readVarInt(ReturnType, bytes, endian);
196196 }
197197
198 pub fn skipBytes(self: *Self, num_bytes: usize) !void {
199 var i: usize = 0;
198 pub fn skipBytes(self: *Self, num_bytes: u64) !void {
199 var i: u64 = 0;
200200 while (i < num_bytes) : (i += 1) {
201201 _ = try self.readByte();
202202 }
......@@ -743,7 +743,7 @@ pub fn CountingOutStream(comptime OutStreamError: type) type {
743743 pub const Error = OutStreamError;
744744
745745 pub stream: Stream,
746 pub bytes_written: usize,
746 pub bytes_written: u64,
747747 child_stream: *Stream,
748748
749749 pub fn init(child_stream: *Stream) Self {
std/io/seekable_stream.zig+8-8
......@@ -7,25 +7,25 @@ pub fn SeekableStream(comptime SeekErrorType: type, comptime GetSeekPosErrorType
77 pub const SeekError = SeekErrorType;
88 pub const GetSeekPosError = GetSeekPosErrorType;
99
10 seekToFn: fn (self: *Self, pos: usize) SeekError!void,
11 seekForwardFn: fn (self: *Self, pos: isize) SeekError!void,
10 seekToFn: fn (self: *Self, pos: u64) SeekError!void,
11 seekForwardFn: fn (self: *Self, pos: i64) SeekError!void,
1212
13 getPosFn: fn (self: *Self) GetSeekPosError!usize,
14 getEndPosFn: fn (self: *Self) GetSeekPosError!usize,
13 getPosFn: fn (self: *Self) GetSeekPosError!u64,
14 getEndPosFn: fn (self: *Self) GetSeekPosError!u64,
1515
16 pub fn seekTo(self: *Self, pos: usize) SeekError!void {
16 pub fn seekTo(self: *Self, pos: u64) SeekError!void {
1717 return self.seekToFn(self, pos);
1818 }
1919
20 pub fn seekForward(self: *Self, amt: isize) SeekError!void {
20 pub fn seekForward(self: *Self, amt: i64) SeekError!void {
2121 return self.seekForwardFn(self, amt);
2222 }
2323
24 pub fn getEndPos(self: *Self) GetSeekPosError!usize {
24 pub fn getEndPos(self: *Self) GetSeekPosError!u64 {
2525 return self.getEndPosFn(self);
2626 }
2727
28 pub fn getPos(self: *Self) GetSeekPosError!usize {
28 pub fn getPos(self: *Self) GetSeekPosError!u64 {
2929 return self.getPosFn(self);
3030 }
3131 };
std/os/file.zig+12-16
......@@ -235,7 +235,7 @@ pub const File = struct {
235235 Unexpected,
236236 };
237237
238 pub fn seekForward(self: File, amount: isize) SeekError!void {
238 pub fn seekForward(self: File, amount: i64) SeekError!void {
239239 switch (builtin.os) {
240240 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {
241241 const result = posix.lseek(self.handle, amount, posix.SEEK_CUR);
......@@ -266,7 +266,7 @@ pub const File = struct {
266266 }
267267 }
268268
269 pub fn seekTo(self: File, pos: usize) SeekError!void {
269 pub fn seekTo(self: File, pos: u64) SeekError!void {
270270 switch (builtin.os) {
271271 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {
272272 const ipos = try math.cast(isize, pos);
......@@ -301,13 +301,12 @@ pub const File = struct {
301301 }
302302
303303 pub const GetSeekPosError = error{
304 Overflow,
305304 SystemResources,
306305 Unseekable,
307306 Unexpected,
308307 };
309308
310 pub fn getPos(self: File) GetSeekPosError!usize {
309 pub fn getPos(self: File) GetSeekPosError!u64 {
311310 switch (builtin.os) {
312311 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {
313312 const result = posix.lseek(self.handle, 0, posix.SEEK_CUR);
......@@ -324,7 +323,7 @@ pub const File = struct {
324323 else => os.unexpectedErrorPosix(err),
325324 };
326325 }
327 return result;
326 return u64(result);
328327 },
329328 Os.windows => {
330329 var pos: windows.LARGE_INTEGER = undefined;
......@@ -336,17 +335,16 @@ pub const File = struct {
336335 };
337336 }
338337
339 assert(pos >= 0);
340 return math.cast(usize, pos);
338 return @intCast(u64, pos);
341339 },
342340 else => @compileError("unsupported OS"),
343341 }
344342 }
345343
346 pub fn getEndPos(self: File) GetSeekPosError!usize {
344 pub fn getEndPos(self: File) GetSeekPosError!u64 {
347345 if (is_posix) {
348346 const stat = try os.posixFStat(self.handle);
349 return @intCast(usize, stat.size);
347 return @intCast(u64, stat.size);
350348 } else if (is_windows) {
351349 var file_size: windows.LARGE_INTEGER = undefined;
352350 if (windows.GetFileSizeEx(self.handle, &file_size) == 0) {
......@@ -355,9 +353,7 @@ pub const File = struct {
355353 else => os.unexpectedErrorWindows(err),
356354 };
357355 }
358 if (file_size < 0)
359 return error.Overflow;
360 return math.cast(usize, @intCast(u64, file_size));
356 return @intCast(u64, file_size);
361357 } else {
362358 @compileError("TODO support getEndPos on this OS");
363359 }
......@@ -492,22 +488,22 @@ pub const File = struct {
492488
493489 pub const Stream = io.SeekableStream(SeekError, GetSeekPosError);
494490
495 pub fn seekToFn(seekable_stream: *Stream, pos: usize) SeekError!void {
491 pub fn seekToFn(seekable_stream: *Stream, pos: u64) SeekError!void {
496492 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
497493 return self.file.seekTo(pos);
498494 }
499495
500 pub fn seekForwardFn(seekable_stream: *Stream, amt: isize) SeekError!void {
496 pub fn seekForwardFn(seekable_stream: *Stream, amt: i64) SeekError!void {
501497 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
502498 return self.file.seekForward(amt);
503499 }
504500
505 pub fn getEndPosFn(seekable_stream: *Stream) GetSeekPosError!usize {
501 pub fn getEndPosFn(seekable_stream: *Stream) GetSeekPosError!u64 {
506502 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
507503 return self.file.getEndPos();
508504 }
509505
510 pub fn getPosFn(seekable_stream: *Stream) GetSeekPosError!usize {
506 pub fn getPosFn(seekable_stream: *Stream) GetSeekPosError!u64 {
511507 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
512508 return self.file.getPos();
513509 }
std/pdb.zig+7-6
......@@ -588,7 +588,7 @@ const SuperBlock = packed struct {
588588
589589const MsfStream = struct {
590590 in_file: os.File,
591 pos: usize,
591 pos: u64,
592592 blocks: []u32,
593593 block_size: u32,
594594
......@@ -598,7 +598,7 @@ const MsfStream = struct {
598598 pub const Error = @typeOf(read).ReturnType.ErrorSet;
599599 pub const Stream = io.InStream(Error);
600600
601 fn init(block_size: u32, block_count: u32, pos: usize, file: os.File, allocator: *mem.Allocator) !MsfStream {
601 fn init(block_size: u32, block_count: u32, pos: u64, file: os.File, allocator: *mem.Allocator) !MsfStream {
602602 var stream = MsfStream{
603603 .in_file = file,
604604 .pos = 0,
......@@ -660,23 +660,24 @@ const MsfStream = struct {
660660 return size;
661661 }
662662
663 fn seekForward(self: *MsfStream, len: usize) !void {
663 // XXX: The `len` parameter should be signed
664 fn seekForward(self: *MsfStream, len: u64) !void {
664665 self.pos += len;
665666 if (self.pos >= self.blocks.len * self.block_size)
666667 return error.EOF;
667668 }
668669
669 fn seekTo(self: *MsfStream, len: usize) !void {
670 fn seekTo(self: *MsfStream, len: u64) !void {
670671 self.pos = len;
671672 if (self.pos >= self.blocks.len * self.block_size)
672673 return error.EOF;
673674 }
674675
675 fn getSize(self: *const MsfStream) usize {
676 fn getSize(self: *const MsfStream) u64 {
676677 return self.blocks.len * self.block_size;
677678 }
678679
679 fn getFilePos(self: MsfStream) usize {
680 fn getFilePos(self: MsfStream) u64 {
680681 const block_id = self.pos / self.block_size;
681682 const block = self.blocks[block_id];
682683 const offset = self.pos % self.block_size;