mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
Properly support --no-create for truncate
This commit is contained in:
parent
4a7778caf1
commit
2001c5c5ee
1 changed files with 22 additions and 29 deletions
|
@ -115,38 +115,31 @@ fn truncate(no_create: bool, io_blocks: bool, reference: Option<~str>, size: Opt
|
||||||
for filename in filenames.iter() {
|
for filename in filenames.iter() {
|
||||||
let filename: &str = *filename;
|
let filename: &str = *filename;
|
||||||
let path = Path::new(filename);
|
let path = Path::new(filename);
|
||||||
if !path.exists() && !no_create {
|
|
||||||
io_error::cond.trap(|_| {
|
|
||||||
writeln!(&mut stderr() as &mut Writer,
|
|
||||||
"Failed to create the file '{}'", filename);
|
|
||||||
os::set_exit_status(1);
|
|
||||||
}).inside(|| {
|
|
||||||
File::create(&path);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
io_error::cond.trap(|err| {
|
io_error::cond.trap(|err| {
|
||||||
writeln!(&mut stderr() as &mut Writer, "{}", err.to_str());
|
writeln!(&mut stderr() as &mut Writer, "{}", err.to_str());
|
||||||
}).inside(|| {
|
}).inside(|| {
|
||||||
match File::open_mode(&path, Open, ReadWrite) {
|
if path.exists() || !no_create {
|
||||||
Some(mut file) => {
|
match File::open_mode(&path, Open, ReadWrite) {
|
||||||
file.seek(0, SeekEnd);
|
Some(mut file) => {
|
||||||
let fsize = file.tell();
|
file.seek(0, SeekEnd);
|
||||||
file.seek(0, SeekSet);
|
let fsize = file.tell();
|
||||||
let tsize = match mode {
|
file.seek(0, SeekSet);
|
||||||
Reference => refsize,
|
let tsize = match mode {
|
||||||
Extend => fsize + refsize,
|
Reference => refsize,
|
||||||
Reduce => fsize - refsize,
|
Extend => fsize + refsize,
|
||||||
AtMost => if fsize > refsize { refsize } else { fsize },
|
Reduce => fsize - refsize,
|
||||||
AtLeast => if fsize < refsize { refsize } else { fsize },
|
AtMost => if fsize > refsize { refsize } else { fsize },
|
||||||
RoundDown => fsize - fsize % refsize,
|
AtLeast => if fsize < refsize { refsize } else { fsize },
|
||||||
RoundUp => fsize + fsize % refsize
|
RoundDown => fsize - fsize % refsize,
|
||||||
};
|
RoundUp => fsize + fsize % refsize
|
||||||
file.truncate(tsize as i64);
|
};
|
||||||
}
|
file.truncate(tsize as i64);
|
||||||
None => {
|
}
|
||||||
writeln!(&mut stderr() as &mut Writer,
|
None => {
|
||||||
"Failed to open the file '{}'", filename);
|
writeln!(&mut stderr() as &mut Writer,
|
||||||
os::set_exit_status(1);
|
"Failed to open the file '{}'", filename);
|
||||||
|
os::set_exit_status(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue