mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 20:17:45 +00:00
truncate: create TruncateMode::to_size() method
Create a method that computes the final target size in bytes for the file to truncate, given the reference file size and the parameter to the `TruncateMode`.
This commit is contained in:
parent
005bc259da
commit
5129114ddc
1 changed files with 27 additions and 10 deletions
|
@ -27,6 +27,32 @@ enum TruncateMode {
|
||||||
RoundUp(u64),
|
RoundUp(u64),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TruncateMode {
|
||||||
|
/// Compute a target size in bytes for this truncate mode.
|
||||||
|
///
|
||||||
|
/// `fsize` is the size of the reference file, in bytes.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust,ignore
|
||||||
|
/// let mode = TruncateMode::Extend(5);
|
||||||
|
/// let fsize = 10;
|
||||||
|
/// assert_eq!(mode.to_size(fsize), 15);
|
||||||
|
/// ```
|
||||||
|
fn to_size(&self, fsize: u64) -> u64 {
|
||||||
|
match self {
|
||||||
|
TruncateMode::Absolute(modsize) => *modsize,
|
||||||
|
TruncateMode::Reference(_) => fsize,
|
||||||
|
TruncateMode::Extend(modsize) => fsize + modsize,
|
||||||
|
TruncateMode::Reduce(modsize) => fsize - modsize,
|
||||||
|
TruncateMode::AtMost(modsize) => fsize.min(*modsize),
|
||||||
|
TruncateMode::AtLeast(modsize) => fsize.max(*modsize),
|
||||||
|
TruncateMode::RoundDown(modsize) => fsize - fsize % modsize,
|
||||||
|
TruncateMode::RoundUp(modsize) => fsize + fsize % modsize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static ABOUT: &str = "Shrink or extend the size of each file to the specified size.";
|
static ABOUT: &str = "Shrink or extend the size of each file to the specified size.";
|
||||||
static VERSION: &str = env!("CARGO_PKG_VERSION");
|
static VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||||
|
|
||||||
|
@ -176,16 +202,7 @@ fn truncate(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
let tsize: u64 = match mode {
|
let tsize = mode.to_size(fsize);
|
||||||
TruncateMode::Absolute(modsize) => modsize,
|
|
||||||
TruncateMode::Reference(_) => fsize,
|
|
||||||
TruncateMode::Extend(modsize) => fsize + modsize,
|
|
||||||
TruncateMode::Reduce(modsize) => fsize - modsize,
|
|
||||||
TruncateMode::AtMost(modsize) => fsize.min(modsize),
|
|
||||||
TruncateMode::AtLeast(modsize) => fsize.max(modsize),
|
|
||||||
TruncateMode::RoundDown(modsize) => fsize - fsize % modsize,
|
|
||||||
TruncateMode::RoundUp(modsize) => fsize + fsize % modsize,
|
|
||||||
};
|
|
||||||
match file.set_len(tsize) {
|
match file.set_len(tsize) {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(f) => crash!(1, "{}", f.to_string()),
|
Err(f) => crash!(1, "{}", f.to_string()),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue