diff --git a/src/alloc.rs b/src/alloc.rs index ad9452fdaa88d372edd63401620cc33ee6006185..9171c3804e7986e2df658835f3cd2d178e967c63 100644 --- a/src/alloc.rs +++ b/src/alloc.rs @@ -1,8 +1,9 @@ use std::{mem, ptr}; use std::rt::heap; use std::sync::atomic::{AtomicUsize, Ordering}; +use std::usize; -const MAX_ALLOC_SIZE: usize = (1 << 32) - 1; +const MAX_ALLOC_SIZE: usize = usize::MAX; /// Allocates memory to be used by Bufs or Bytes. Allows allocating memory /// using alternate stratgies than the default Rust heap allocator. Also does diff --git a/src/lib.rs b/src/lib.rs index d516a75d95ff3b3c229106626509599114f51ce5..8c4874fa2d876aa486bce10dd781df9897e4ecc9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -307,25 +307,28 @@ impl<'a> Sink for &'a mut Vec<u8> { fn sink<B: Buf>(self, buf: &mut B) -> Result<usize, BufError> { use std::slice; + self.clear(); + let rem = buf.remaining(); let cap = self.capacity(); - let len = rem - cap; // Ensure that the vec is big enough - if cap < rem { - self.reserve(len); + if rem > self.capacity() { + self.reserve(rem - cap); } unsafe { { let dst = self.as_mut_slice(); - buf.read_slice(slice::from_raw_parts_mut(dst.as_mut_ptr(), rem)); + let cnt = buf.read_slice(slice::from_raw_parts_mut(dst.as_mut_ptr(), rem)); + + debug_assert!(cnt == rem); } self.set_len(rem); } - Ok(len) + Ok(rem) } }