Impl truncate for the remainder of IO modules

This commit is contained in:
PThorpe92
2025-07-17 11:58:11 -04:00
committed by Jussi Saurio
parent d30157518f
commit ce1897cb4a
3 changed files with 36 additions and 0 deletions

View File

@@ -174,6 +174,20 @@ impl File for MemoryFile {
Ok(c)
}
fn truncate(&self, len: u64, c: Completion) -> Result<Arc<Completion>> {
let new_size = len as usize;
if new_size < self.size.get() {
// Truncate pages
unsafe {
let pages = &mut *self.pages.get();
pages.retain(|&k, _| k * PAGE_SIZE < new_size);
}
}
self.size.set(new_size);
c.complete(0);
Ok(Arc::new(c))
}
fn size(&self) -> Result<u64> {
Ok(self.size.get() as u64)
}

View File

@@ -450,6 +450,21 @@ impl File for UnixFile<'_> {
let file = self.file.lock().unwrap();
Ok(file.metadata()?.len())
}
#[instrument(err, skip_all, level = Level::INFO)]
fn truncate(&self, len: u64, c: Completion) -> Result<Arc<Completion>> {
let file = self.file.borrow();
let result = file.set_len(len);
let c = Arc::new(c);
match result {
Ok(()) => {
trace!("file truncated to len=({})", len);
c.complete(0);
Ok(c)
}
Err(e) => Err(e.into()),
}
}
}
impl Drop for UnixFile<'_> {

View File

@@ -123,6 +123,13 @@ impl File for WindowsFile {
}
#[instrument(err, skip_all, level = Level::TRACE)]
fn truncate(&self, len: u64, c: Completion) -> Result<()> {
let mut file = self.file.borrow_mut();
file.set_len(len).map_err(LimboError::IOError)?;
c.complete(0);
Ok(())
}
fn size(&self) -> Result<u64> {
let file = self.file.read();
Ok(file.metadata().unwrap().len())