summaryrefslogtreecommitdiffstats
path: root/buffered-reader
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@pep.foundation>2017-12-16 14:59:52 +0100
committerNeal H. Walfield <neal@pep.foundation>2017-12-16 18:41:00 +0100
commit3773af17f77521f1fd8338d3af8db378f2959c9e (patch)
tree612f69313238b668a7147fe4593dcf0bd2f185f3 /buffered-reader
parent69b56252c6295e5c7a38fc1aa0427550f804c241 (diff)
openpgp: Add a setting to the PacketParser to buffer unread content
- Add a setting to the PacketParser to enable buffering of unread content when the PacketParser is advanced.
Diffstat (limited to 'buffered-reader')
-rw-r--r--buffered-reader/src/lib.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/buffered-reader/src/lib.rs b/buffered-reader/src/lib.rs
index 951b8c71..7f082f72 100644
--- a/buffered-reader/src/lib.rs
+++ b/buffered-reader/src/lib.rs
@@ -152,6 +152,24 @@ pub trait BufferedReader : io::Read + fmt::Debug {
return Ok(data);
}
+ /// Like steal_eof, but instead of returning the data, the data is
+ /// discarded.
+ fn drop_eof(&mut self) -> Result<(), std::io::Error> {
+ loop {
+ match self.data_consume(DEFAULT_BUF_SIZE) {
+ Ok(ref buffer) =>
+ if buffer.len() < DEFAULT_BUF_SIZE {
+ // EOF.
+ break;
+ },
+ Err(err) =>
+ return Err(err),
+ }
+ }
+
+ Ok(())
+ }
+
fn into_inner<'a>(self: Box<Self>) -> Option<Box<BufferedReader + 'a>>
where Self: 'a;
}
@@ -234,6 +252,10 @@ impl <'a> BufferedReader for Box<BufferedReader + 'a> {
return self.as_mut().steal_eof();
}
+ fn drop_eof(&mut self) -> Result<(), std::io::Error> {
+ return self.as_mut().drop_eof();
+ }
+
fn into_inner<'b>(self: Box<Self>) -> Option<Box<BufferedReader + 'b>>
where Self: 'b {
// Strip the outer box.