1use std::io;
2
3pub fn extract_noattr(result: io::Result<Vec<u8>>) -> io::Result<Option<Vec<u8>>> {
4 result.map(Some).or_else(|e: Error| {
5 if e.raw_os_error() == Some(crate::sys::ENOATTR) {
6 Ok(None)
7 } else {
8 Err(e)
9 }
10 })
11}
12
13#[allow(dead_code)]
14pub fn allocate_loop<E, F: FnMut(&mut [u8]) -> Result<usize, E>>(mut f: F) -> io::Result<Vec<u8>>
15where
16 io::Error: From<E>,
17{
18 let mut vec: Vec<u8> = Vec::new();
19 loop {
20 let ret: usize = f(&mut [])?;
21 vec.resize(new_len:ret, value:0);
22
23 match f(&mut vec) {
24 Ok(size: usize) => {
25 vec.truncate(len:size);
26 vec.shrink_to_fit();
27 return Ok(vec);
28 }
29
30 Err(e: E) => {
31 let err: io::Error = e.into();
32 if err.raw_os_error() == Some(crate::sys::ERANGE) {
33 continue;
34 } else {
35 return Err(err);
36 }
37 }
38 }
39 }
40}
41