authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-28 17:06:20+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-28 18:07:40+02:00
logfbcc559cdbe67b711ea24a152aa7bb3a10bb06c7
treefcbad1d82f4f9dbf1d7d4e9d756d84e9d89a9a04
parent205e501e42b9a2e1d35afa0873311165100863ae

Make io offsets/sizes u64 instead of usize

Decouple the concepts of address-space size and file size. Closes #637

4 files changed, 32 insertions(+), 31 deletions(-)

std/io.zig+5-5
...@@ -195,8 +195,8 @@ pub fn InStream(comptime ReadError: type) type {...@@ -195,8 +195,8 @@ pub fn InStream(comptime ReadError: type) type {
195 return mem.readVarInt(ReturnType, bytes, endian);195 return mem.readVarInt(ReturnType, bytes, endian);
196 }196 }
197197
198 pub fn skipBytes(self: *Self, num_bytes: usize) !void {198 pub fn skipBytes(self: *Self, num_bytes: u64) !void {
199 var i: usize = 0;199 var i: u64 = 0;
200 while (i < num_bytes) : (i += 1) {200 while (i < num_bytes) : (i += 1) {
201 _ = try self.readByte();201 _ = try self.readByte();
202 }202 }
...@@ -232,9 +232,9 @@ pub fn OutStream(comptime WriteError: type) type {...@@ -232,9 +232,9 @@ pub fn OutStream(comptime WriteError: type) type {
232 return self.writeFn(self, slice);232 return self.writeFn(self, slice);
233 }233 }
234234
235 pub fn writeByteNTimes(self: *Self, byte: u8, n: usize) Error!void {235 pub fn writeByteNTimes(self: *Self, byte: u8, n: u64) Error!void {
236 const slice = (*const [1]u8)(&byte)[0..];236 const slice = (*const [1]u8)(&byte)[0..];
237 var i: usize = 0;237 var i: u64 = 0;
238 while (i < n) : (i += 1) {238 while (i < n) : (i += 1) {
239 try self.writeFn(self, slice);239 try self.writeFn(self, slice);
240 }240 }
...@@ -743,7 +743,7 @@ pub fn CountingOutStream(comptime OutStreamError: type) type {...@@ -743,7 +743,7 @@ pub fn CountingOutStream(comptime OutStreamError: type) type {
743 pub const Error = OutStreamError;743 pub const Error = OutStreamError;
744744
745 pub stream: Stream,745 pub stream: Stream,
746 pub bytes_written: usize,746 pub bytes_written: u64,
747 child_stream: *Stream,747 child_stream: *Stream,
748748
749 pub fn init(child_stream: *Stream) Self {749 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...@@ -7,25 +7,25 @@ pub fn SeekableStream(comptime SeekErrorType: type, comptime GetSeekPosErrorType
7 pub const SeekError = SeekErrorType;7 pub const SeekError = SeekErrorType;
8 pub const GetSeekPosError = GetSeekPosErrorType;8 pub const GetSeekPosError = GetSeekPosErrorType;
99
10 seekToFn: fn (self: *Self, pos: usize) SeekError!void,10 seekToFn: fn (self: *Self, pos: u64) SeekError!void,
11 seekForwardFn: fn (self: *Self, pos: isize) SeekError!void,11 seekForwardFn: fn (self: *Self, pos: i64) SeekError!void,
1212
13 getPosFn: fn (self: *Self) GetSeekPosError!usize,13 getPosFn: fn (self: *Self) GetSeekPosError!u64,
14 getEndPosFn: fn (self: *Self) GetSeekPosError!usize,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 {
17 return self.seekToFn(self, pos);17 return self.seekToFn(self, pos);
18 }18 }
1919
20 pub fn seekForward(self: *Self, amt: isize) SeekError!void {20 pub fn seekForward(self: *Self, amt: i64) SeekError!void {
21 return self.seekForwardFn(self, amt);21 return self.seekForwardFn(self, amt);
22 }22 }
2323
24 pub fn getEndPos(self: *Self) GetSeekPosError!usize {24 pub fn getEndPos(self: *Self) GetSeekPosError!u64 {
25 return self.getEndPosFn(self);25 return self.getEndPosFn(self);
26 }26 }
2727
28 pub fn getPos(self: *Self) GetSeekPosError!usize {28 pub fn getPos(self: *Self) GetSeekPosError!u64 {
29 return self.getPosFn(self);29 return self.getPosFn(self);
30 }30 }
31 };31 };
std/os/file.zig+12-12
...@@ -235,7 +235,7 @@ pub const File = struct {...@@ -235,7 +235,7 @@ pub const File = struct {
235 Unexpected,235 Unexpected,
236 };236 };
237237
238 pub fn seekForward(self: File, amount: isize) SeekError!void {238 pub fn seekForward(self: File, amount: i64) SeekError!void {
239 switch (builtin.os) {239 switch (builtin.os) {
240 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {240 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {
241 const result = posix.lseek(self.handle, amount, posix.SEEK_CUR);241 const result = posix.lseek(self.handle, amount, posix.SEEK_CUR);
...@@ -266,7 +266,7 @@ pub const File = struct {...@@ -266,7 +266,7 @@ pub const File = struct {
266 }266 }
267 }267 }
268268
269 pub fn seekTo(self: File, pos: usize) SeekError!void {269 pub fn seekTo(self: File, pos: u64) SeekError!void {
270 switch (builtin.os) {270 switch (builtin.os) {
271 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {271 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {
272 const ipos = try math.cast(isize, pos);272 const ipos = try math.cast(isize, pos);
...@@ -307,7 +307,7 @@ pub const File = struct {...@@ -307,7 +307,7 @@ pub const File = struct {
307 Unexpected,307 Unexpected,
308 };308 };
309309
310 pub fn getPos(self: File) GetSeekPosError!usize {310 pub fn getPos(self: File) GetSeekPosError!u64 {
311 switch (builtin.os) {311 switch (builtin.os) {
312 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {312 Os.linux, Os.macosx, Os.ios, Os.freebsd, Os.netbsd => {
313 const result = posix.lseek(self.handle, 0, posix.SEEK_CUR);313 const result = posix.lseek(self.handle, 0, posix.SEEK_CUR);
...@@ -324,7 +324,7 @@ pub const File = struct {...@@ -324,7 +324,7 @@ pub const File = struct {
324 else => os.unexpectedErrorPosix(err),324 else => os.unexpectedErrorPosix(err),
325 };325 };
326 }326 }
327 return result;327 return @intCast(u64, result);
328 },328 },
329 Os.windows => {329 Os.windows => {
330 var pos: windows.LARGE_INTEGER = undefined;330 var pos: windows.LARGE_INTEGER = undefined;
...@@ -337,16 +337,16 @@ pub const File = struct {...@@ -337,16 +337,16 @@ pub const File = struct {
337 }337 }
338338
339 assert(pos >= 0);339 assert(pos >= 0);
340 return math.cast(usize, pos);340 return math.cast(u64, pos);
341 },341 },
342 else => @compileError("unsupported OS"),342 else => @compileError("unsupported OS"),
343 }343 }
344 }344 }
345345
346 pub fn getEndPos(self: File) GetSeekPosError!usize {346 pub fn getEndPos(self: File) GetSeekPosError!u64 {
347 if (is_posix) {347 if (is_posix) {
348 const stat = try os.posixFStat(self.handle);348 const stat = try os.posixFStat(self.handle);
349 return @intCast(usize, stat.size);349 return @intCast(u64, stat.size);
350 } else if (is_windows) {350 } else if (is_windows) {
351 var file_size: windows.LARGE_INTEGER = undefined;351 var file_size: windows.LARGE_INTEGER = undefined;
352 if (windows.GetFileSizeEx(self.handle, &file_size) == 0) {352 if (windows.GetFileSizeEx(self.handle, &file_size) == 0) {
...@@ -357,7 +357,7 @@ pub const File = struct {...@@ -357,7 +357,7 @@ pub const File = struct {
357 }357 }
358 if (file_size < 0)358 if (file_size < 0)
359 return error.Overflow;359 return error.Overflow;
360 return math.cast(usize, @intCast(u64, file_size));360 return @intCast(u64, file_size);
361 } else {361 } else {
362 @compileError("TODO support getEndPos on this OS");362 @compileError("TODO support getEndPos on this OS");
363 }363 }
...@@ -492,22 +492,22 @@ pub const File = struct {...@@ -492,22 +492,22 @@ pub const File = struct {
492492
493 pub const Stream = io.SeekableStream(SeekError, GetSeekPosError);493 pub const Stream = io.SeekableStream(SeekError, GetSeekPosError);
494494
495 pub fn seekToFn(seekable_stream: *Stream, pos: usize) SeekError!void {495 pub fn seekToFn(seekable_stream: *Stream, pos: u64) SeekError!void {
496 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);496 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
497 return self.file.seekTo(pos);497 return self.file.seekTo(pos);
498 }498 }
499499
500 pub fn seekForwardFn(seekable_stream: *Stream, amt: isize) SeekError!void {500 pub fn seekForwardFn(seekable_stream: *Stream, amt: i64) SeekError!void {
501 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);501 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
502 return self.file.seekForward(amt);502 return self.file.seekForward(amt);
503 }503 }
504504
505 pub fn getEndPosFn(seekable_stream: *Stream) GetSeekPosError!usize {505 pub fn getEndPosFn(seekable_stream: *Stream) GetSeekPosError!u64 {
506 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);506 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
507 return self.file.getEndPos();507 return self.file.getEndPos();
508 }508 }
509509
510 pub fn getPosFn(seekable_stream: *Stream) GetSeekPosError!usize {510 pub fn getPosFn(seekable_stream: *Stream) GetSeekPosError!u64 {
511 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);511 const self = @fieldParentPtr(SeekableStream, "stream", seekable_stream);
512 return self.file.getPos();512 return self.file.getPos();
513 }513 }
std/pdb.zig+7-6
...@@ -588,7 +588,7 @@ const SuperBlock = packed struct {...@@ -588,7 +588,7 @@ const SuperBlock = packed struct {
588588
589const MsfStream = struct {589const MsfStream = struct {
590 in_file: os.File,590 in_file: os.File,
591 pos: usize,591 pos: u64,
592 blocks: []u32,592 blocks: []u32,
593 block_size: u32,593 block_size: u32,
594594
...@@ -598,7 +598,7 @@ const MsfStream = struct {...@@ -598,7 +598,7 @@ const MsfStream = struct {
598 pub const Error = @typeOf(read).ReturnType.ErrorSet;598 pub const Error = @typeOf(read).ReturnType.ErrorSet;
599 pub const Stream = io.InStream(Error);599 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 {
602 var stream = MsfStream{602 var stream = MsfStream{
603 .in_file = file,603 .in_file = file,
604 .pos = 0,604 .pos = 0,
...@@ -660,23 +660,24 @@ const MsfStream = struct {...@@ -660,23 +660,24 @@ const MsfStream = struct {
660 return size;660 return size;
661 }661 }
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 {
664 self.pos += len;665 self.pos += len;
665 if (self.pos >= self.blocks.len * self.block_size)666 if (self.pos >= self.blocks.len * self.block_size)
666 return error.EOF;667 return error.EOF;
667 }668 }
668669
669 fn seekTo(self: *MsfStream, len: usize) !void {670 fn seekTo(self: *MsfStream, len: u64) !void {
670 self.pos = len;671 self.pos = len;
671 if (self.pos >= self.blocks.len * self.block_size)672 if (self.pos >= self.blocks.len * self.block_size)
672 return error.EOF;673 return error.EOF;
673 }674 }
674675
675 fn getSize(self: *const MsfStream) usize {676 fn getSize(self: *const MsfStream) u64 {
676 return self.blocks.len * self.block_size;677 return self.blocks.len * self.block_size;
677 }678 }
678679
679 fn getFilePos(self: MsfStream) usize {680 fn getFilePos(self: MsfStream) u64 {
680 const block_id = self.pos / self.block_size;681 const block_id = self.pos / self.block_size;
681 const block = self.blocks[block_id];682 const block = self.blocks[block_id];
682 const offset = self.pos % self.block_size;683 const offset = self.pos % self.block_size;