| ... | ... | @@ -311,9 +311,13 @@ pub fn LinearFifo( |
| 311 | 311 | self.rewind(src.len); |
| 312 | 312 | |
| 313 | 313 | 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 | } |
| 317 | 321 | } |
| 318 | 322 | |
| 319 | 323 | /// Peek at the item at `offset` |
| ... | ... | @@ -385,6 +389,9 @@ test "LinearFifo(u8, .Dynamic)" { |
| 385 | 389 | try fifo.unget("prependedstring"); |
| 386 | 390 | var result: [30]u8 = undefined; |
| 387 | 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 | } |
| 389 | 396 | |
| 390 | 397 | fifo.shrink(0); |