linux_perf_data/jitdump/
read_exact.rs

1pub trait ReadExactOrUntilEof {
2    /// Reads until all of dest has been filled or until EOF has been reached.
3    fn read_exact_or_until_eof(&mut self, dest: &mut [u8]) -> Result<usize, std::io::Error>;
4}
5
6impl<R: std::io::Read> ReadExactOrUntilEof for R {
7    fn read_exact_or_until_eof(&mut self, mut dest: &mut [u8]) -> Result<usize, std::io::Error> {
8        let mut total_read = 0;
9        while !dest.is_empty() {
10            match self.read(dest)? {
11                0 => break,
12                n => {
13                    total_read += n;
14                    dest = &mut dest[n..];
15                }
16            }
17        }
18        Ok(total_read)
19    }
20}