diff options
Diffstat (limited to 'buffered-reader')
-rw-r--r-- | buffered-reader/Cargo.toml | 2 | ||||
-rw-r--r-- | buffered-reader/src/dup.rs | 4 | ||||
-rw-r--r-- | buffered-reader/src/eof.rs | 2 | ||||
-rw-r--r-- | buffered-reader/src/file_unix.rs | 6 | ||||
-rw-r--r-- | buffered-reader/src/generic.rs | 2 | ||||
-rw-r--r-- | buffered-reader/src/lib.rs | 29 | ||||
-rw-r--r-- | buffered-reader/src/limitor.rs | 6 | ||||
-rw-r--r-- | buffered-reader/src/memory.rs | 4 | ||||
-rw-r--r-- | buffered-reader/src/reserve.rs | 6 |
9 files changed, 28 insertions, 33 deletions
diff --git a/buffered-reader/Cargo.toml b/buffered-reader/Cargo.toml index c2644763..0a6eabee 100644 --- a/buffered-reader/Cargo.toml +++ b/buffered-reader/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "buffered-reader" description = "A super-powered Reader" -version = "0.14.0" +version = "0.17.0" authors = [ "Justus Winter <justus@sequoia-pgp.org>", "Kai Michaelis <kai@sequoia-pgp.org>", diff --git a/buffered-reader/src/dup.rs b/buffered-reader/src/dup.rs index 7870050b..d2573dce 100644 --- a/buffered-reader/src/dup.rs +++ b/buffered-reader/src/dup.rs @@ -52,9 +52,9 @@ impl<T: BufferedReader<C>, C> Dup<T, C> { /// `cookie_mut` methods, and set using the `cookie_set` method. pub fn with_cookie(reader: T, cookie: C) -> Self { Dup { - reader: reader, + reader, cursor: 0, - cookie: cookie, + cookie, } } diff --git a/buffered-reader/src/eof.rs b/buffered-reader/src/eof.rs index 928cd518..41d3d763 100644 --- a/buffered-reader/src/eof.rs +++ b/buffered-reader/src/eof.rs @@ -35,7 +35,7 @@ impl<C> EOF<C> { /// Instantiates a new `EOF` with a cookie. pub fn with_cookie(cookie: C) -> Self { EOF { - cookie: cookie, + cookie, } } } diff --git a/buffered-reader/src/file_unix.rs b/buffered-reader/src/file_unix.rs index 5f6ebb75..2162f7d1 100644 --- a/buffered-reader/src/file_unix.rs +++ b/buffered-reader/src/file_unix.rs @@ -134,7 +134,7 @@ impl<'a, C> File<'a, C> { mmap(ptr::null_mut(), length, PROT_READ, MAP_PRIVATE, fd, 0) }; - if addr.is_null() { + if addr == libc::MAP_FAILED { return generic(file, cookie); } @@ -144,8 +144,8 @@ impl<'a, C> File<'a, C> { Ok(File( Imp::MMAP { - addr: addr, - length: length, + addr, + length, reader: Memory::with_cookie(slice, cookie), } )) diff --git a/buffered-reader/src/generic.rs b/buffered-reader/src/generic.rs index bd5a21c6..1ab87e50 100644 --- a/buffered-reader/src/generic.rs +++ b/buffered-reader/src/generic.rs @@ -68,7 +68,7 @@ impl<T: io::Read, C> Generic<T, C> { if let Some(s) = preferred_chunk_size { s } else { DEFAULT_BUF_SIZE }, reader: Box::new(reader), - cookie: cookie, + cookie, } } diff --git a/buffered-reader/src/lib.rs b/buffered-reader/src/lib.rs index ea838e11..7c5ec322 100644 --- a/buffered-reader/src/lib.rs +++ b/buffered-reader/src/lib.rs @@ -233,6 +233,7 @@ use std::io; use std::io::{Error, ErrorKind}; use std::cmp; use std::fmt; +use std::convert::TryInto; mod generic; mod memory; @@ -603,15 +604,16 @@ pub trait BufferedReader<C> : io::Read + fmt::Debug + fmt::Display { /// in big endian format. fn read_be_u16(&mut self) -> Result<u16, std::io::Error> { let input = self.data_consume_hard(2)?; - return Ok(((input[0] as u16) << 8) + (input[1] as u16)); + // input holds at least 2 bytes, so this cannot fail. + Ok(u16::from_be_bytes(input[..2].try_into().unwrap())) } /// A convenience function for reading a 32-bit unsigned integer /// in big endian format. fn read_be_u32(&mut self) -> Result<u32, std::io::Error> { let input = self.data_consume_hard(4)?; - return Ok(((input[0] as u32) << 24) + ((input[1] as u32) << 16) - + ((input[2] as u32) << 8) + (input[3] as u32)); + // input holds at least 4 bytes, so this cannot fail. + Ok(u32::from_be_bytes(input[..4].try_into().unwrap())) } /// Reads until either `terminal` is encountered or EOF. @@ -799,19 +801,12 @@ pub trait BufferedReader<C> : io::Read + fmt::Debug + fmt::Display { fn drop_eof(&mut self) -> Result<bool, std::io::Error> { let mut at_least_one_byte = false; loop { - match self.data_consume(DEFAULT_BUF_SIZE) { - Ok(ref buffer) => { - if buffer.len() > 0 { - at_least_one_byte = true; - } - - if buffer.len() < DEFAULT_BUF_SIZE { - // EOF. - break; - } - } - Err(err) => - return Err(err), + let n = self.data(DEFAULT_BUF_SIZE)?.len(); + at_least_one_byte |= n > 0; + self.consume(n); + if n < DEFAULT_BUF_SIZE { + // EOF. + break; } } @@ -886,7 +881,7 @@ pub trait BufferedReader<C> : io::Read + fmt::Debug + fmt::Display { /// impl <T: BufferedReader> std::io::Read for T { ... } /// ``` /// -/// but, alas, Rust doesn't like that ("error[E0119]: conflicting +/// but, alas, Rust doesn't like that ("error\[E0119\]: conflicting /// implementations of trait `std::io::Read` for type `&mut _`"). pub fn buffered_reader_generic_read_impl<T: BufferedReader<C>, C> (bio: &mut T, buf: &mut [u8]) -> Result<usize, io::Error> { diff --git a/buffered-reader/src/limitor.rs b/buffered-reader/src/limitor.rs index 65478194..a8588032 100644 --- a/buffered-reader/src/limitor.rs +++ b/buffered-reader/src/limitor.rs @@ -45,9 +45,9 @@ impl<T: BufferedReader<C>, C> Limitor<T, C> { pub fn with_cookie(reader: T, limit: u64, cookie: C) -> Limitor<T, C> { Limitor { - reader: reader, - limit: limit, - cookie: cookie, + reader, + limit, + cookie, } } } diff --git a/buffered-reader/src/memory.rs b/buffered-reader/src/memory.rs index 2ecf96a3..7647f4ea 100644 --- a/buffered-reader/src/memory.rs +++ b/buffered-reader/src/memory.rs @@ -52,9 +52,9 @@ impl<'a, C> Memory<'a, C> { /// `cookie_mut` methods, and set using the `cookie_set` method. pub fn with_cookie(buffer: &'a [u8], cookie: C) -> Self { Memory { - buffer: buffer, + buffer, cursor: 0, - cookie: cookie, + cookie, } } diff --git a/buffered-reader/src/reserve.rs b/buffered-reader/src/reserve.rs index 4c2ec047..3d0364d5 100644 --- a/buffered-reader/src/reserve.rs +++ b/buffered-reader/src/reserve.rs @@ -49,9 +49,9 @@ impl<T: BufferedReader<C>, C> Reserve<T, C> { pub fn with_cookie(reader: T, reserve: usize, cookie: C) -> Reserve<T, C> { Reserve { - reader: reader, - reserve: reserve, - cookie: cookie, + reader, + reserve, + cookie, } } } |