mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-05 17:24:21 +01:00
Merge 'core/io: Switch Unix I/O to use libc::pwrite()' from Pekka Enberg
We use libc elsewhere for fault injection reasons, so let's do this call-site too. Reviewed-by: Pere Diaz Bou <pere-altea@homail.com> Closes #2811
This commit is contained in:
@@ -219,15 +219,22 @@ impl File for UnixFile {
|
||||
#[instrument(err, skip_all, level = Level::TRACE)]
|
||||
fn pwrite(&self, pos: usize, buffer: Arc<crate::Buffer>, c: Completion) -> Result<Completion> {
|
||||
let file = self.file.lock();
|
||||
let result = { rustix::io::pwrite(file.as_fd(), buffer.as_slice(), pos as u64) };
|
||||
match result {
|
||||
Ok(n) => {
|
||||
trace!("pwrite n: {}", n);
|
||||
// Read succeeded immediately
|
||||
c.complete(n as i32);
|
||||
Ok(c)
|
||||
}
|
||||
Err(e) => Err(e.into()),
|
||||
let result = unsafe {
|
||||
libc::pwrite(
|
||||
file.as_raw_fd(),
|
||||
buffer.as_slice().as_ptr() as *const libc::c_void,
|
||||
buffer.as_slice().len(),
|
||||
pos as libc::off_t,
|
||||
)
|
||||
};
|
||||
if result == -1 {
|
||||
let e = std::io::Error::last_os_error();
|
||||
Err(e.into())
|
||||
} else {
|
||||
trace!("pwrite n: {}", result);
|
||||
// Write succeeded immediately
|
||||
c.complete(result as i32);
|
||||
Ok(c)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user