diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-03-11 16:14:12 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-03-11 16:14:12 -0400 |
| commit | 6892865ba72ea220a12a8238ce78aedab1237cce (patch) | |
| tree | ec60bbfbd034db797cb0ae9a19e52e2d2af8f9cb /lib/std/io/fixed_buffer_stream.zig | |
| parent | 04626c176b328f7ae937b0828f14f4b4be62b733 (diff) | |
| download | zig-6892865ba72ea220a12a8238ce78aedab1237cce.tar.gz zig-6892865ba72ea220a12a8238ce78aedab1237cce.zip | |
FixedBufferStream: match file semantics more by clamping pos
Diffstat (limited to 'lib/std/io/fixed_buffer_stream.zig')
| -rw-r--r-- | lib/std/io/fixed_buffer_stream.zig | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/std/io/fixed_buffer_stream.zig b/lib/std/io/fixed_buffer_stream.zig index cc4b9c0193..0d091eea72 100644 --- a/lib/std/io/fixed_buffer_stream.zig +++ b/lib/std/io/fixed_buffer_stream.zig @@ -76,21 +76,22 @@ pub fn FixedBufferStream(comptime Buffer: type) type { } pub fn seekTo(self: *Self, pos: u64) SeekError!void { - const usize_pos = std.math.cast(usize, pos) catch std.math.maxInt(usize); - self.pos = usize_pos; + self.pos = if (std.math.cast(usize, pos)) |x| x else |_| self.buffer.len; } pub fn seekBy(self: *Self, amt: i64) SeekError!void { if (amt < 0) { - const abs_amt = std.math.cast(usize, -amt) catch std.math.maxInt(usize); - if (abs_amt > self.pos) { + const abs_amt = std.math.absCast(amt); + const abs_amt_usize = std.math.cast(usize, abs_amt) catch std.math.maxInt(usize); + if (abs_amt_usize > self.pos) { self.pos = 0; } else { - self.pos -= abs_amt; + self.pos -= abs_amt_usize; } } else { - const usize_amt = std.math.cast(usize, amt) catch std.math.maxInt(usize); - self.pos = std.math.add(usize, self.pos, usize_amt) catch std.math.maxInt(usize); + const amt_usize = std.math.cast(usize, amt) catch std.math.maxInt(usize); + const new_pos = std.math.add(usize, self.pos, amt_usize) catch std.math.maxInt(usize); + self.pos = std.math.min(self.buffer.len, new_pos); } } @@ -102,7 +103,6 @@ pub fn FixedBufferStream(comptime Buffer: type) type { return self.pos; } - /// Asserts that the seek pos is within the buffer range. pub fn getWritten(self: Self) []const u8 { return self.buffer[0..self.pos]; } |
