@@ -76,21 +76,22 @@ pub fn FixedBufferStream(comptime Buffer: type) type {
76
76
}
77
77
78
78
pub fn seekTo (self : * Self , pos : u64 ) SeekError ! void {
79
- const usize_pos = std .math .cast (usize , pos ) catch std .math .maxInt (usize );
80
- self .pos = usize_pos ;
79
+ self .pos = if (std .math .cast (usize , pos )) | x | x else | _ | self .buffer .len ;
81
80
}
82
81
83
82
pub fn seekBy (self : * Self , amt : i64 ) SeekError ! void {
84
83
if (amt < 0 ) {
85
- const abs_amt = std .math .cast (usize , - amt ) catch std .math .maxInt (usize );
86
- if (abs_amt > self .pos ) {
84
+ const abs_amt = std .math .absCast (amt );
85
+ const abs_amt_usize = std .math .cast (usize , abs_amt ) catch std .math .maxInt (usize );
86
+ if (abs_amt_usize > self .pos ) {
87
87
self .pos = 0 ;
88
88
} else {
89
- self .pos -= abs_amt ;
89
+ self .pos -= abs_amt_usize ;
90
90
}
91
91
} else {
92
- const usize_amt = std .math .cast (usize , amt ) catch std .math .maxInt (usize );
93
- self .pos = std .math .add (usize , self .pos , usize_amt ) catch std .math .maxInt (usize );
92
+ const amt_usize = std .math .cast (usize , amt ) catch std .math .maxInt (usize );
93
+ const new_pos = std .math .add (usize , self .pos , amt_usize ) catch std .math .maxInt (usize );
94
+ self .pos = std .math .min (self .buffer .len , new_pos );
94
95
}
95
96
}
96
97
@@ -102,7 +103,6 @@ pub fn FixedBufferStream(comptime Buffer: type) type {
102
103
return self .pos ;
103
104
}
104
105
105
- /// Asserts that the seek pos is within the buffer range.
106
106
pub fn getWritten (self : Self ) []const u8 {
107
107
return self .buffer [0.. self .pos ];
108
108
}
0 commit comments