1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-31 13:07:46 +00:00

Merge pull request #412 from Arcterus/test-fix

Make test pass all of the Busybox tests
This commit is contained in:
Heather 2014-10-07 09:28:05 +04:00
commit 92cf96dedd

View file

@ -38,15 +38,7 @@ pub fn uumain(_: Vec<String>) -> int {
}, },
_ => args.slice(1, args.len()), _ => args.slice(1, args.len()),
}; };
let rv = match args.len() { 1 - dispatch(args) as int
0 => false,
1 => one(args),
2 => two(args),
3 => three(args),
4 => four(args),
_ => return 2,
};
1 - rv as int
} }
fn one(args: &[&[u8]]) -> bool { fn one(args: &[&[u8]]) -> bool {
@ -88,6 +80,8 @@ fn three(args: &[&[u8]]) -> bool {
b"-ge" => integers(args[0], args[2], GreaterEqual), b"-ge" => integers(args[0], args[2], GreaterEqual),
b"-lt" => integers(args[0], args[2], Less), b"-lt" => integers(args[0], args[2], Less),
b"-le" => integers(args[0], args[2], LessEqual), b"-le" => integers(args[0], args[2], LessEqual),
b"-a" => one(args.slice_to(1)) && one(args.slice_from(2)),
b"-o" => one(args.slice_to(1)) || one(args.slice_from(2)),
_ => match args[0] { _ => match args[0] {
b"!" => !two(args.slice_from(1)), b"!" => !two(args.slice_from(1)),
_ => false, _ => false,
@ -96,9 +90,18 @@ fn three(args: &[&[u8]]) -> bool {
} }
fn four(args: &[&[u8]]) -> bool { fn four(args: &[&[u8]]) -> bool {
match args[0] { let (val, len) = match args[0] {
b"!" => !three(args.slice_from(1)), b"!" => (!three(args.slice_from(1)), 4),
_ => false, _ => (three(args), 3)
};
if len < args.len() {
match args[len] {
b"-a" => val && dispatch(args.slice_from(len + 1)),
b"-o" => val || dispatch(args.slice_from(len + 1)),
_ => false
}
} else {
val
} }
} }
@ -136,6 +139,16 @@ fn isatty(fd: &[u8]) -> bool {
.map(|i| unsafe { isatty(i) == 1 }).unwrap_or(false) .map(|i| unsafe { isatty(i) == 1 }).unwrap_or(false)
} }
fn dispatch(args: &[&[u8]]) -> bool {
match args.len() {
0 => false,
1 => one(args),
2 => two(args),
3 => three(args),
_ => four(args)
}
}
#[deriving(Eq, PartialEq)] #[deriving(Eq, PartialEq)]
enum PathCondition { enum PathCondition {
BlockSpecial, BlockSpecial,
@ -242,4 +255,3 @@ fn path(path: &[u8], cond: PathCondition) -> bool {
Executable => false, // TODO Executable => false, // TODO
} }
} }