replace ftruncate/ftruncate64 with a simple set_len() call

This commit is contained in:
antiochp 2018-11-12 13:54:38 +00:00
parent 207621b545
commit 0010a9227e
No known key found for this signature in database
GPG key ID: 49CBDBCE8AB061C1

View file

@ -17,14 +17,8 @@ use memmap;
use std::cmp; use std::cmp;
use std::fs::{self, File, OpenOptions}; use std::fs::{self, File, OpenOptions};
use std::io::{self, BufRead, BufReader, BufWriter, ErrorKind, Read, Write}; use std::io::{self, BufRead, BufReader, BufWriter, ErrorKind, Read, Write};
use std::os::unix::io::AsRawFd;
use std::path::Path; use std::path::Path;
#[cfg(not(any(target_os = "linux", target_os = "android")))]
use libc::{ftruncate as ftruncate64, off_t as off64_t};
#[cfg(any(target_os = "linux"))]
use libc::{ftruncate64, off64_t};
use core::core::hash::Hash; use core::core::hash::Hash;
use core::ser::{self, FixedLength}; use core::ser::{self, FixedLength};
@ -189,8 +183,8 @@ impl AppendOnlyFile {
/// written data accessible. /// written data accessible.
pub fn flush(&mut self) -> io::Result<()> { pub fn flush(&mut self) -> io::Result<()> {
if self.buffer_start_bak > 0 { if self.buffer_start_bak > 0 {
// flushing a rewound state, we need to truncate before applying // Flushing a rewound state, we need to truncate via set_len() before applying.
self.truncate(self.buffer_start)?; self.file.set_len(self.buffer_start as u64)?;
self.buffer_start_bak = 0; self.buffer_start_bak = 0;
} }
@ -256,16 +250,16 @@ impl AppendOnlyFile {
} }
} }
/// Truncates the underlying file to the provided offset // /// Truncates the underlying file to the provided offset
pub fn truncate(&self, offs: usize) -> io::Result<()> { // pub fn truncate(&self, offs: usize) -> io::Result<()> {
let fd = self.file.as_raw_fd(); // let fd = self.file.as_raw_fd();
let res = unsafe { ftruncate64(fd, offs as off64_t) }; // let res = unsafe { ftruncate64(fd, offs as off64_t) };
if res == -1 { // if res == -1 {
Err(io::Error::last_os_error()) // Err(io::Error::last_os_error())
} else { // } else {
Ok(()) // Ok(())
} // }
} // }
/// Saves a copy of the current file content, skipping data at the provided /// Saves a copy of the current file content, skipping data at the provided
/// prune indices. The prune Vec must be ordered. /// prune indices. The prune Vec must be ordered.