Commit c393969a20

daurnimator <quae@daurnimator.com>
2019-11-10 17:03:57
std: fix bug in fifo.unget if rewinding doesn't wrap around
1 parent 61179a4
Changed files (1)
lib
lib/std/fifo.zig
@@ -311,9 +311,13 @@ pub fn LinearFifo(
             self.rewind(src.len);
 
             const slice = self.readableSliceMut(0);
-            mem.copy(T, slice, src[0..slice.len]);
-            const slice2 = self.readableSliceMut(slice.len);
-            mem.copy(T, slice2, src[slice.len..]);
+            if (src.len < slice.len) {
+                mem.copy(T, slice, src);
+            } else {
+                mem.copy(T, slice, src[0..slice.len]);
+                const slice2 = self.readableSliceMut(slice.len);
+                mem.copy(T, slice2, src[slice.len..]);
+            }
         }
 
         /// Peek at the item at `offset`
@@ -385,6 +389,9 @@ test "LinearFifo(u8, .Dynamic)" {
         try fifo.unget("prependedstring");
         var result: [30]u8 = undefined;
         testing.expectEqualSlices(u8, "prependedstringabcdefghij", result[0..fifo.read(&result)]);
+        try fifo.unget("b");
+        try fifo.unget("a");
+        testing.expectEqualSlices(u8, "ab", result[0..fifo.read(&result)]);
     }
 
     fifo.shrink(0);