summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--buffered-reader/src/lib.rs19
-rw-r--r--openpgp/src/parse/parse.rs2
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()
}