1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::{
borrow_streamer::{BorrowStreamer, BorrowStreamerMut},
Advice, ReadAt,
};
use std::{
fs,
io::{self, copy, Read},
};
use system_interface::fs::FileIoExt;
use unsafe_io::AsUnsafeFile;
#[inline]
pub fn advise<Filelike: AsUnsafeFile>(
filelike: &Filelike,
offset: u64,
len: u64,
advice: Advice,
) -> io::Result<()> {
<fs::File as FileIoExt>::advise(&filelike.as_file_view(), offset, len, advice)
}
#[inline]
pub fn copy_from<Filelike: AsUnsafeFile, R: ReadAt>(
filelike: &mut Filelike,
offset: u64,
input: &R,
input_offset: u64,
len: u64,
) -> io::Result<u64> {
let mut input_view = filelike.as_file_view();
let mut output_streamer = BorrowStreamerMut::new(&mut *input_view, offset);
let input_streamer = BorrowStreamer::new(input, input_offset);
copy(&mut input_streamer.take(len), &mut output_streamer)
}
#[inline]
pub fn set_len<Filelike: AsUnsafeFile>(filelike: &mut Filelike, size: u64) -> io::Result<()> {
filelike.as_file_view().set_len(size)
}