diff options
author | Neal H. Walfield <neal@pep.foundation> | 2017-12-16 14:59:52 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@pep.foundation> | 2017-12-16 18:41:00 +0100 |
commit | 3773af17f77521f1fd8338d3af8db378f2959c9e (patch) | |
tree | 612f69313238b668a7147fe4593dcf0bd2f185f3 /buffered-reader | |
parent | 69b56252c6295e5c7a38fc1aa0427550f804c241 (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.rs | 22 |
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. |