sys_util: add set_len() trait

Generalize file_sync into file_traits so that we can add another
wrapper, this time for the set_len() method implemented directly on
File.  This will also be implemented on QcowFile.

BUG=chromium:858815
TEST=build_test

Change-Id: I43fbd1968a844c8cac359973a63babcc26942204
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1394148
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Reviewed-by: David Tolnay <dtolnay@chromium.org>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Reviewed-by: Zach Reizner <zachr@chromium.org>
This commit is contained in:
Daniel Verkamp 2018-12-06 15:39:31 -08:00 committed by chrome-bot
parent d1eceeca7b
commit 6d47e1b005
2 changed files with 18 additions and 2 deletions

View file

@ -19,3 +19,19 @@ impl FileSync for File {
self.sync_all()
}
}
/// A trait for setting the size of a file.
/// This is equivalent to File's `set_len` method, but
/// wrapped in a trait so that it can be implemented for
/// other types.
pub trait FileSetLen {
// Set the size of this file.
// This is the moral equivalent of `ftruncate()`.
fn set_len(&self, _len: u64) -> Result<()>;
}
impl FileSetLen for File {
fn set_len(&self, len: u64) -> Result<()> {
File::set_len(self, len)
}
}

View file

@ -21,7 +21,7 @@ pub mod syslog;
mod errno;
mod eventfd;
mod file_flags;
mod file_sync;
mod file_traits;
mod fork;
mod guest_address;
mod guest_memory;
@ -62,7 +62,7 @@ pub use tempdir::*;
pub use terminal::*;
pub use timerfd::*;
pub use file_sync::FileSync;
pub use file_traits::{FileSetLen, FileSync};
pub use guest_memory::Error as GuestMemoryError;
pub use mmap::Error as MmapError;
pub use seek_hole::SeekHole;