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(
311311 self.rewind(src.len);
312312
313313 const slice = self.readableSliceMut(0);
314 mem.copy(T, slice, src[0..slice.len]);
315 const slice2 = self.readableSliceMut(slice.len);
316 mem.copy(T, slice2, src[slice.len..]);
314 if (src.len < slice.len) {
315 mem.copy(T, slice, src);
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 }
317321 }
318322
319323 /// Peek at the item at `offset`
......@@ -385,6 +389,9 @@ test "LinearFifo(u8, .Dynamic)" {
385389 try fifo.unget("prependedstring");
386390 var result: [30]u8 = undefined;
387391 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)]);
388395 }
389396
390397 fifo.shrink(0);