authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-11-11 03:03:57+11:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-11-25 09:26:33+11:00
logc393969a2013fc64f1e1c65157164dfdfbafb08a
tree85d78f476c8f2bcab190a72b3eb172b021801cf4
parent61179a4d5210399107c2964f02071cb55264bba2
signaturelock-open Commit is signed but in an unrecognized format.

std: fix bug in fifo.unget if rewinding doesn't wrap around


1 files changed, 10 insertions(+), 3 deletions(-)

lib/std/fifo.zig+10-3
...@@ -311,9 +311,13 @@ pub fn LinearFifo(...@@ -311,9 +311,13 @@ pub fn LinearFifo(
311 self.rewind(src.len);311 self.rewind(src.len);
312312
313 const slice = self.readableSliceMut(0);313 const slice = self.readableSliceMut(0);
314 mem.copy(T, slice, src[0..slice.len]);314 if (src.len < slice.len) {
315 const slice2 = self.readableSliceMut(slice.len);315 mem.copy(T, slice, src);
316 mem.copy(T, slice2, src[slice.len..]);316 } else {
317 mem.copy(T, slice, src[0..slice.len]);
318 const slice2 = self.readableSliceMut(slice.len);
319 mem.copy(T, slice2, src[slice.len..]);
320 }
317 }321 }
318322
319 /// Peek at the item at `offset`323 /// Peek at the item at `offset`
...@@ -385,6 +389,9 @@ test "LinearFifo(u8, .Dynamic)" {...@@ -385,6 +389,9 @@ test "LinearFifo(u8, .Dynamic)" {
385 try fifo.unget("prependedstring");389 try fifo.unget("prependedstring");
386 var result: [30]u8 = undefined;390 var result: [30]u8 = undefined;
387 testing.expectEqualSlices(u8, "prependedstringabcdefghij", result[0..fifo.read(&result)]);391 testing.expectEqualSlices(u8, "prependedstringabcdefghij", result[0..fifo.read(&result)]);
392 try fifo.unget("b");
393 try fifo.unget("a");
394 testing.expectEqualSlices(u8, "ab", result[0..fifo.read(&result)]);
388 }395 }
389396
390 fifo.shrink(0);397 fifo.shrink(0);