--- ls.c | 6 +++-- tests/ls-R.sh | 17 ++++++++++++++ tests/ls-R.sh.expected | 48 +++++++++++++++++++++++++++++++++++++++ tests/xargs-n.sh | 10 ++++++++ tests/xargs-n.sh.expected | 5 ++++ xargs.c | 10 ++++---- 6 files changed, 89 insertions(+), 7 deletions(-) create mode 100755 tests/ls-R.sh create mode 100644 tests/ls-R.sh.expected create mode 100755 tests/xargs-n.sh create mode 100644 tests/xargs-n.sh.expected diff --git a/ls.c b/ls.c index aa95fef..869ecd1 100644 --- a/ls.c +++ b/ls.c _AT_@ -30,10 +30,10 @@ struct entry { ino_t ino, tino; }; -static struct { +static struct tree { dev_t dev; ino_t ino; -} tree[PATH_MAX]; +} *tree; static int ret = 0; static int Aflag = 0; _AT_@ -369,7 +369,9 @@ int main(int argc, char *argv[]) { struct entry ent, *dents, *fents; + struct tree treebuf[PATH_MAX] = {0}; size_t i, ds, fs; + tree = treebuf; ARGBEGIN { case '1': diff --git a/tests/ls-R.sh b/tests/ls-R.sh new file mode 100755 index 0000000..df70551 --- /dev/null +++ b/tests/ls-R.sh _AT_@ -0,0 +1,17 @@ +#!/bin/sh +TESTEXE="${TESTEXE:-../../ls}" +TESTARG="-R" +TESTINP="" + +mkdir -p ls-R.tmp || exit 2 +cd ls-R.tmp || exit 2 +mkdir -p test1 test2 test4 test5 test2/sub1 test2/sub2 || exit 2 +touch testfile test2/sub1/file1 test2/sub1/file2 || exit 2 +command -v "$TESTEXE" >/dev/null || exit 127 +"$TESTEXE" $TESTARG >"../$0.out" 2>&1 test2 test3 test4 || fail=1 +"$TESTEXE" $TESTARG >>"../$0.out" 2>&1 test4 test5 testfile || fail=1 +"$TESTEXE" $TESTARG >>"../$0.out" 2>&1 . || fail=1 +cd .. +cmp "$0.expected" "$0.out" || fail=1 +exit $fail + diff --git a/tests/ls-R.sh.expected b/tests/ls-R.sh.expected new file mode 100644 index 0000000..757eba2 --- /dev/null +++ b/tests/ls-R.sh.expected _AT_@ -0,0 +1,48 @@ +test2: +sub1 +sub2 + +test2/sub1: +file1 +file2 + +test2/sub2: + +test3: +sub1 +sub2 + +test3/sub1: +file1 +file2 + +test3/sub2: + +test4: +testfile + +test4: + +test5: +test1 +test2 +test3 +test4 +test5 +testfile + +./test1: + +./test2: +sub1 +sub2 + +./test2/sub1: +file1 +file2 + +./test2/sub2: + +./test4: + +./test5: diff --git a/tests/xargs-n.sh b/tests/xargs-n.sh new file mode 100755 index 0000000..a0c292c --- /dev/null +++ b/tests/xargs-n.sh _AT_@ -0,0 +1,10 @@ +#!/bin/sh +TESTEXE="${TESTEXE:-../xargs}" +TESTARG="-n3" +TESTINP="aaaa bbb c\nddd eeee\nfffffff\nggggg h iiii\nj k l\na bbb" + +command -v "$TESTEXE" >/dev/null || exit 127 +printf "$TESTINP" | "$TESTEXE" $TESTARG >"$0.out" 2>&1 || fail=1 +cmp "$0.expected" "$0.out" || fail=1 +exit $fail + diff --git a/tests/xargs-n.sh.expected b/tests/xargs-n.sh.expected new file mode 100644 index 0000000..f2cc442 --- /dev/null +++ b/tests/xargs-n.sh.expected _AT_@ -0,0 +1,5 @@ +aaaa bbb c +ddd eeee fffffff +ggggg h iiii +j k l +a bbb diff --git a/xargs.c b/xargs.c index d9b2d98..cc48772 100644 --- a/xargs.c +++ b/xargs.c _AT_@ -20,7 +20,7 @@ static int parsequote(int); static int parseescape(void); static char *poparg(void); static void waitchld(void); -static void spawn(void); +static void spawn(char **); static size_t argbsz; static size_t argbpos; _AT_@ -28,7 +28,6 @@ static size_t maxargs = 0; static int nerrors = 0; static int rflag = 0, nflag = 0, tflag = 0, xflag = 0, Iflag = 0; static char *argb; -static char *cmd[NARGS]; static char *eofstr; static int _AT_@ -162,7 +161,7 @@ waitchld(void) } static void -spawn(void) +spawn(char *cmd[]) { int savederrno; int first = 1; _AT_@ -203,6 +202,7 @@ main(int argc, char *argv[]) int ret = 0, leftover = 0, i, j; size_t argsz, argmaxsz; size_t arglen, a; + char *cmd[NARGS]; char *arg = ""; char *replstr; _AT_@ -287,11 +287,11 @@ main(int argc, char *argv[]) } cmd[i] = NULL; if (a >= maxargs && nflag) - spawn(); + spawn(cmd); else if (!a || (i == 1 && rflag)) ; else - spawn(); + spawn(cmd); for (; i >= 0; i--) free(cmd[i]); } while (arg); -- 2.49.0Received on Wed Jun 04 2025 - 06:40:41 CEST
This archive was generated by hypermail 2.3.0 : Wed Jun 04 2025 - 07:00:38 CEST