diff --git a/src/buf/byte.rs b/src/buf/byte.rs index bf1e14ac27d6b2c4c8eebf07156b3ab12c9691eb..46c2e6d269cc9c4f7a9d03931087524e471d5570 100644 --- a/src/buf/byte.rs +++ b/src/buf/byte.rs @@ -329,7 +329,7 @@ impl MutBuf for MutByteBuf { self.buf.remaining() } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { self.buf.advance(cnt) } diff --git a/src/buf/mod.rs b/src/buf/mod.rs index a1539f418f931a69d738f029692634992e36d5e8..9acb915a43caa365944a120bae0a6e9abdea7583 100644 --- a/src/buf/mod.rs +++ b/src/buf/mod.rs @@ -95,7 +95,7 @@ pub trait MutBuf : Sized { fn remaining(&self) -> usize; /// Advance the internal cursor of the MutBuf - fn advance(&mut self, cnt: usize); + unsafe fn advance(&mut self, cnt: usize); /// Returns true iff there is any more space for bytes to be written fn has_remaining(&self) -> bool { @@ -143,9 +143,10 @@ pub trait MutBuf : Sized { cnt); off += cnt; + } - self.advance(cnt); + unsafe { self.advance(cnt); } } len @@ -278,7 +279,7 @@ impl<'a, R: io::Read+'a> Source for &'a mut R { break; } - buf.advance(i); + unsafe { buf.advance(i); } cnt += i; } @@ -338,7 +339,7 @@ impl MutBuf for Vec<u8> { usize::MAX - self.len() } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { let len = self.len() + cnt; if len > self.capacity() { @@ -348,9 +349,7 @@ impl MutBuf for Vec<u8> { self.reserve(cap - len); } - unsafe { - self.set_len(len); - } + self.set_len(len); } unsafe fn mut_bytes(&mut self) -> &mut [u8] { diff --git a/src/buf/ring.rs b/src/buf/ring.rs index 892b1ab08acbc0c5dca53ebe7ae4ffdae040a69f..730809505ce42decc783bd6647b427b3a4c54d1e 100644 --- a/src/buf/ring.rs +++ b/src/buf/ring.rs @@ -199,7 +199,7 @@ impl MutBuf for RingBuf { self.write_remaining() } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { self.advance_writer(cnt) } diff --git a/src/buf/slice.rs b/src/buf/slice.rs index fb117ff05bad85a1f55de5c9ac971e42bb827642..a526803bff0bd9a013d90338b06b8ff48228911b 100644 --- a/src/buf/slice.rs +++ b/src/buf/slice.rs @@ -48,7 +48,7 @@ impl<'a> MutBuf for MutSliceBuf<'a> { self.bytes.len() - self.pos } - fn advance(&mut self, mut cnt: usize) { + unsafe fn advance(&mut self, mut cnt: usize) { cnt = cmp::min(cnt, self.remaining()); self.pos += cnt; } diff --git a/src/buf/take.rs b/src/buf/take.rs index edc72377f1fc59d1af1fe22dd94d21848f7bd87d..7fec5b9f3561cee9d4c560e6972ed97c4462d4ff 100644 --- a/src/buf/take.rs +++ b/src/buf/take.rs @@ -71,7 +71,7 @@ impl<T: MutBuf> MutBuf for Take<T> { &mut self.inner.mut_bytes()[..self.limit] } - fn advance(&mut self, cnt: usize) { + unsafe fn advance(&mut self, cnt: usize) { let cnt = cmp::min(cnt, self.limit); self.limit -= cnt; self.inner.advance(cnt); diff --git a/src/str/bytes.rs b/src/str/bytes.rs index 42e1756105fe6fb76279ae0638516e34a30a2a78..d5bf4092ac1a7854912ab613360217d877bd6177 100644 --- a/src/str/bytes.rs +++ b/src/str/bytes.rs @@ -220,7 +220,7 @@ impl<'a> Source for &'a Bytes { } src.advance(l); - dst.advance(l); + unsafe { dst.advance(l); } res += l; }