From 0e4e8f14d6be4cd816b195962658b9d8888b74b4 Mon Sep 17 00:00:00 2001 From: Arcterus Date: Mon, 6 Oct 2014 22:16:07 -0700 Subject: [PATCH] Make test pass all of the Busybox tests --- src/test/test.rs | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/test/test.rs b/src/test/test.rs index 9a3f76d77..a91d53cd0 100644 --- a/src/test/test.rs +++ b/src/test/test.rs @@ -38,15 +38,7 @@ pub fn uumain(_: Vec) -> int { }, _ => args.slice(1, args.len()), }; - let rv = match args.len() { - 0 => false, - 1 => one(args), - 2 => two(args), - 3 => three(args), - 4 => four(args), - _ => return 2, - }; - 1 - rv as int + 1 - dispatch(args) as int } fn one(args: &[&[u8]]) -> bool { @@ -88,6 +80,8 @@ fn three(args: &[&[u8]]) -> bool { b"-ge" => integers(args[0], args[2], GreaterEqual), b"-lt" => integers(args[0], args[2], Less), 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] { b"!" => !two(args.slice_from(1)), _ => false, @@ -96,9 +90,18 @@ fn three(args: &[&[u8]]) -> bool { } fn four(args: &[&[u8]]) -> bool { - match args[0] { - b"!" => !three(args.slice_from(1)), - _ => false, + let (val, len) = match args[0] { + b"!" => (!three(args.slice_from(1)), 4), + _ => (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) } +fn dispatch(args: &[&[u8]]) -> bool { + match args.len() { + 0 => false, + 1 => one(args), + 2 => two(args), + 3 => three(args), + _ => four(args) + } +} + #[deriving(Eq, PartialEq)] enum PathCondition { BlockSpecial, @@ -242,4 +255,3 @@ fn path(path: &[u8], cond: PathCondition) -> bool { Executable => false, // TODO } } -