diff options
author | Neal H. Walfield <neal@pep.foundation> | 2018-07-16 13:05:53 +0200 |
---|---|---|
committer | Neal H. Walfield <neal@pep.foundation> | 2018-07-16 13:09:56 +0200 |
commit | 51e95911d49c1bee8ea52553d82bac88b1c140ae (patch) | |
tree | e5b799b74f2cca7d0892f969885f2b526bc4e93f | |
parent | 004b3862a7c5e5b8be424c6cf8cf4fd7739aefdd (diff) |
buffered-reader: Have drop_eof return if any content was dropped
-rw-r--r-- | buffered-reader/src/lib.rs | 19 | ||||
-rw-r--r-- | openpgp/src/parse/parse.rs | 2 |
2 files changed, 15 insertions, 6 deletions
diff --git a/buffered-reader/src/lib.rs b/buffered-reader/src/lib.rs index 945de531..7ff77578 100644 --- a/buffered-reader/src/lib.rs +++ b/buffered-reader/src/lib.rs @@ -174,20 +174,29 @@ pub trait BufferedReader<C> : io::Read + fmt::Debug { /// Like steal_eof, but instead of returning the data, the data is /// discarded. - fn drop_eof(&mut self) -> Result<(), std::io::Error> { + /// + /// One success, returns whether any data (i.e., at least one + /// byte) was discarded. + 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) => + 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), } } - Ok(()) + Ok(at_least_one_byte) } fn into_inner<'a>(self: Box<Self>) -> Option<Box<BufferedReader<C> + 'a>> @@ -296,7 +305,7 @@ impl <'a, C> BufferedReader<C> for Box<BufferedReader<C> + 'a> { return self.as_mut().steal_eof(); } - fn drop_eof(&mut self) -> Result<(), std::io::Error> { + fn drop_eof(&mut self) -> Result<bool, std::io::Error> { return self.as_mut().drop_eof(); } diff --git a/openpgp/src/parse/parse.rs b/openpgp/src/parse/parse.rs index b60c8c50..4553d621 100644 --- a/openpgp/src/parse/parse.rs +++ b/openpgp/src/parse/parse.rs @@ -2475,7 +2475,7 @@ impl<'a> BufferedReader<Cookie> for PacketParser<'a> { self.reader.steal_eof() } - fn drop_eof(&mut self) -> io::Result<()> { + fn drop_eof(&mut self) -> io::Result<bool> { self.content_was_read = true; self.reader.drop_eof() } |