| ... | @@ -311,9 +311,13 @@ pub fn LinearFifo( | ... | @@ -311,9 +311,13 @@ pub fn LinearFifo( |
| 311 | self.rewind(src.len); | 311 | self.rewind(src.len); |
| 312 | | 312 | |
| 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 | } |
| 318 | | 322 | |
| 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 | } |
| 389 | | 396 | |
| 390 | fifo.shrink(0); | 397 | fifo.shrink(0); |