1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

Update for latest Rust

This commit is contained in:
Arcterus 2014-02-04 20:17:36 -08:00
parent 810936ac42
commit 9197373843
2 changed files with 72 additions and 39 deletions

View file

@ -6,8 +6,8 @@ static TESTNAME: &'static str = "THISISARANDOMFILENAME";
fn make_file() -> io::File { fn make_file() -> io::File {
while Path::new(TESTNAME).exists() { io::timer::sleep(1000); } while Path::new(TESTNAME).exists() { io::timer::sleep(1000); }
match io::File::create(&Path::new(TESTNAME)) { match io::File::create(&Path::new(TESTNAME)) {
Some(f) => f, Ok(f) => f,
None => fail!() Err(_) => fail!()
} }
} }
@ -18,7 +18,7 @@ fn test_increase_file_size() {
fail!(); fail!();
} }
file.seek(0, io::SeekEnd); file.seek(0, io::SeekEnd);
if file.tell() != 5 * 1024 { if file.tell().unwrap() != 5 * 1024 {
fail!(); fail!();
} }
io::fs::unlink(&Path::new(TESTNAME)); io::fs::unlink(&Path::new(TESTNAME));
@ -32,7 +32,7 @@ fn test_decrease_file_size() {
fail!(); fail!();
} }
file.seek(0, io::SeekEnd); file.seek(0, io::SeekEnd);
if file.tell() != 6 { if file.tell().unwrap() != 6 {
println!("{}", file.tell()); println!("{}", file.tell());
fail!(); fail!();
} }

View file

@ -9,13 +9,45 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
#[feature(macro_rules)];
extern mod extra; extern mod extra;
use std::io::{stderr, io_error, File, Open, ReadWrite, Writer, SeekEnd, SeekSet}; use std::io::{stderr, File, Open, ReadWrite, Writer, SeekEnd, SeekSet};
use std::os; use std::os;
use std::u64; use std::u64;
use extra::getopts::groups; use extra::getopts::groups;
macro_rules! get_file_size(
($file:ident, $action:expr) => ({
match $file.seek(0, SeekEnd) {
Ok(_) => {}
Err(f) => {
writeln!(&mut stderr() as &mut Writer, "{}", f.to_str());
os::set_exit_status(1);
$action
}
}
let size = match $file.tell() {
Ok(m) => m,
Err(f) => {
writeln!(&mut stderr() as &mut Writer, "{}", f.to_str());
os::set_exit_status(1);
$action
}
};
match $file.seek(0, SeekSet) {
Ok(_) => {}
Err(f) => {
writeln!(&mut stderr() as &mut Writer, "{}", f.to_str());
os::set_exit_status(1);
$action
}
}
size
})
)
#[deriving(Eq)] #[deriving(Eq)]
enum TruncateMode { enum TruncateMode {
Reference, Reference,
@ -97,14 +129,15 @@ file based on its current size:
fn truncate(no_create: bool, io_blocks: bool, reference: Option<~str>, size: Option<~str>, filenames: ~[~str]) { fn truncate(no_create: bool, io_blocks: bool, reference: Option<~str>, size: Option<~str>, filenames: ~[~str]) {
let (refsize, mode) = match reference { let (refsize, mode) = match reference {
Some(rfilename) => { Some(rfilename) => {
io_error::cond.trap(|err| { let mut rfile = match File::open(&Path::new(rfilename.clone())) {
writeln!(&mut stderr() as &mut Writer, "{}", err.to_str()); Ok(m) => m,
Err(f) => {
writeln!(&mut stderr() as &mut Writer, "{}", f.to_str());
os::set_exit_status(1); os::set_exit_status(1);
}).inside(|| { return
let mut rfile = File::open(&Path::new(rfilename.clone())); }
rfile.seek(0, SeekEnd); };
(rfile.tell(), Reference) (get_file_size!(rfile, return), Reference)
})
} }
None => { None => {
match parse_size(size.unwrap()) { match parse_size(size.unwrap()) {
@ -116,15 +149,10 @@ 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);
io_error::cond.trap(|err| {
writeln!(&mut stderr() as &mut Writer, "{}", err.to_str());
}).inside(|| {
if path.exists() || !no_create { if path.exists() || !no_create {
match File::open_mode(&path, Open, ReadWrite) { match File::open_mode(&path, Open, ReadWrite) {
Some(mut file) => { Ok(mut file) => {
file.seek(0, SeekEnd); let fsize = get_file_size!(file, continue);
let fsize = file.tell();
file.seek(0, SeekSet);
let tsize = match mode { let tsize = match mode {
Reference => refsize, Reference => refsize,
Extend => fsize + refsize, Extend => fsize + refsize,
@ -134,16 +162,21 @@ fn truncate(no_create: bool, io_blocks: bool, reference: Option<~str>, size: Opt
RoundDown => fsize - fsize % refsize, RoundDown => fsize - fsize % refsize,
RoundUp => fsize + fsize % refsize RoundUp => fsize + fsize % refsize
}; };
file.truncate(tsize as i64); match file.truncate(tsize as i64) {
} Ok(_) => {}
None => { Err(f) => {
writeln!(&mut stderr() as &mut Writer, writeln!(&mut stderr() as &mut Writer,
"Failed to open the file '{}'", filename); "{}", f.to_str());
os::set_exit_status(1);
}
}
}
Err(f) => {
writeln!(&mut stderr() as &mut Writer, "{}", f.to_str());
os::set_exit_status(1); os::set_exit_status(1);
} }
} }
} }
});
} }
} }