tr: more of code shrink (getopt32-ification) runtest: cleanup. Method of getting $applets was truly bizarre
No binary (build failed)
—
(log yok)
| @@ -22,10 +22,6 @@ | |
| #define ASCII 0377 | |
| - | #define TR_OPT_complement (1<<0) |
| - | #define TR_OPT_delete (1<<1) |
| - | #define TR_OPT_squeeze_reps (1<<2) |
| - | |
| static void map(char *pvector, | |
| unsigned char *string1, unsigned int string1_len, | |
| unsigned char *string2, unsigned int string2_len) | |
| @@ -180,47 +176,39 @@ static int complement(char *buffer, int buffer_len) | |
| int tr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |
| int tr_main(int argc, char **argv) | |
| { | |
| - | unsigned char *ptr; |
| int output_length = 0, input_length; | |
| - | int idx = 1; |
| int i; | |
| - | smalluint flags = 0; |
| + | smalluint flags; |
| ssize_t read_chars = 0; | |
| size_t in_index = 0, out_index = 0; | |
| unsigned last = UCHAR_MAX + 1; /* not equal to any char */ | |
| unsigned char coded, c; | |
| - | RESERVE_CONFIG_UBUFFER(output, BUFSIZ); |
| - | RESERVE_CONFIG_BUFFER(vector, ASCII+1); |
| - | RESERVE_CONFIG_BUFFER(invec, ASCII+1); |
| - | RESERVE_CONFIG_BUFFER(outvec, ASCII+1); |
| + | unsigned char *output = xmalloc(BUFSIZ); |
| + | char *vector = xzalloc((ASCII+1) * 3); |
| + | char *invec = vector + (ASCII+1); |
| + | char *outvec = vector + (ASCII+1) * 2; |
| + | |
| + | #define TR_OPT_complement (1 << 0) |
| + | #define TR_OPT_delete (1 << 1) |
| + | #define TR_OPT_squeeze_reps (1 << 2) |
| + | |
| + | flags = getopt32(argv, "+cds"); /* '+': stop at first non-option */ |
| + | argv += optind; |
| - | if (argc > 1 && argv[idx][0] == '-') { |
| - | for (ptr = (unsigned char *) &argv[idx][1]; *ptr; ptr++) { |
| - | if (*ptr == 'c') |
| - | flags |= TR_OPT_complement; |
| - | else if (*ptr == 'd') |
| - | flags |= TR_OPT_delete; |
| - | else if (*ptr == 's') |
| - | flags |= TR_OPT_squeeze_reps; |
| - | else |
| - | bb_show_usage(); |
| - | } |
| - | idx++; |
| - | } |
| for (i = 0; i <= ASCII; i++) { | |
| vector[i] = i; | |
| - | invec[i] = outvec[i] = FALSE; |
| + | /*invec[i] = outvec[i] = FALSE; - done by xzalloc */ |
| } | |
| #define tr_buf bb_common_bufsiz1 | |
| - | if (argv[idx] != NULL) { |
| - | input_length = expand(argv[idx++], tr_buf); |
| + | if (*argv != NULL) { |
| + | input_length = expand(*argv++, tr_buf); |
| if (flags & TR_OPT_complement) | |
| input_length = complement(tr_buf, input_length); | |
| - | if (argv[idx]) { |
| - | if (argv[idx][0] == '\0') |
| + | if (*argv) { |
| + | if (argv[0][0] == '\0') |
| bb_error_msg_and_die("STRING2 cannot be empty"); | |
| - | output_length = expand(argv[idx], output); |
| + | output_length = expand(*argv, output); |
| map(vector, tr_buf, input_length, output, output_length); | |
| } | |
| for (i = 0; i < input_length; i++) | |
| @@ -1,9 +1,5 @@ | |
| #!/bin/sh | |
| - | [ -n "$srcdir" ] || srcdir=$(pwd) |
| - | [ -n "$bindir" ] || bindir=$(dirname $(pwd)) |
| - | PATH=$bindir:$PATH |
| - | |
| # Run old-style test. | |
| run_applet_testcase() | |
| @@ -35,9 +31,9 @@ run_applet_testcase() | |
| mkdir -p tmp | |
| pushd tmp > /dev/null | |
| - | d=$srcdir sh -x -e $testcase >.logfile.txt 2>&1 || status=$? |
| + | d=$tsdir sh -x -e $testcase >.logfile.txt 2>&1 || status=$? |
| - | if [ $status -ne 0 ] ; then |
| + | if [ $status -ne 0 ]; then |
| echo FAIL: $testname | |
| if [ $verbose -gt 0 ]; then | |
| cat .logfile.txt | |
| @@ -61,14 +57,11 @@ run_applet_tests() | |
| local status=0 | |
| - | for testcase in $srcdir/$applet/*; do |
| - | if [ "$testcase" = "$srcdir/$applet/CVS" ]; then |
| + | for testcase in $tsdir/$applet/*; do |
| + | if [ "$testcase" = "$tsdir/$applet/CVS" ]; then |
| continue | |
| fi | |
| - | |
| - | if run_applet_testcase $applet $testcase; then |
| - | : |
| - | else |
| + | if ! run_applet_testcase $applet $testcase; then |
| status=1 | |
| fi | |
| done | |
| @@ -80,64 +73,61 @@ run_applet_tests() | |
| status=0 | |
| verbose=0 | |
| + | [ -n "$tsdir" ] || tsdir=$(pwd) |
| + | [ -n "$bindir" ] || bindir=$(dirname $(pwd)) |
| + | PATH="$bindir:$PATH" |
| + | |
| if [ x"$1" = x"-v" ]; then | |
| verbose=1 | |
| export VERBOSE=$verbose | |
| shift | |
| fi | |
| + | implemented=$( |
| + | $bindir/busybox 2>&1 | |
| + | while read line; do |
| + | if test x"$line" = x"Currently defined functions:"; then |
| + | xargs | sed 's/,//g' |
| + | break |
| + | fi |
| + | done |
| + | ) |
| + | |
| + | applets="$implemented" |
| if [ $# -ne 0 ]; then | |
| - | applets=$(cd $srcdir ; for i in $@; do ls ${i}* ; done) |
| - | else |
| - | applets=$(ls $srcdir) |
| + | applets="$@" |
| fi | |
| # Populate a directory with links to all busybox applets | |
| LINKSDIR="$bindir/runtest-tempdir-links" | |
| - | implemented=$($bindir/busybox 2>&1 | |
| - | while read line |
| - | do |
| - | if test x"$line" = x"Currently defined functions:" |
| - | then |
| - | xargs | sed 's/,//g' |
| - | break |
| - | fi |
| - | done |
| - | ) |
| rm -rf "$LINKSDIR" 2>/dev/null | |
| mkdir "$LINKSDIR" | |
| - | for i in $implemented |
| - | do |
| + | for i in $implemented; do |
| ln -s $bindir/busybox "$LINKSDIR"/$i | |
| done | |
| # Set up option flags so tests can be selective. | |
| - | configfile=${bindir:-../../}/.config |
| - | export OPTIONFLAGS=:$(echo $(sed -nr 's/^CONFIG_(.*)=.*/\1/p' $configfile) | sed 's/ /:/g') |
| + | configfile=${bindir}/.config |
| + | export OPTIONFLAGS=:$(sed -nr 's/^CONFIG_(.*)=.*/\1/p' $configfile | xargs | sed 's/ /:/g') |
| for applet in $applets; do | |
| if [ "$applet" = "links" ]; then continue; fi | |
| - | if [ "$applet" != "CVS" -a -d "$srcdir/$applet" ]; then |
| - | if run_applet_tests $applet; then |
| - | : |
| - | else |
| + | if [ "$applet" != "CVS" -a -d "$tsdir/$applet" ]; then |
| + | if ! run_applet_tests $applet; then |
| status=1 | |
| fi | |
| fi | |
| # Is this a new-style test? | |
| - | applet=$(echo "$applet" | sed -n 's/\.tests$//p') |
| - | if [ ${#applet} -ne 0 ] |
| - | then |
| - | if [ ! -h "$LINKSDIR/$applet" ] && [ "${applet:0:4}" != "all_" ] |
| - | then |
| + | if [ -f ${applet}.tests ]; then |
| + | if [ ! -h "$LINKSDIR/$applet" ] && [ "${applet:0:4}" != "all_" ]; then |
| echo "SKIPPED: $applet (not built)" | |
| continue | |
| fi | |
| - | if PATH="$LINKSDIR":$srcdir:$bindir:$PATH \ |
| - | "${srcdir:-.}/$applet".tests |
| + | if PATH="$LINKSDIR":$tsdir:$bindir:$PATH \ |
| + | "${tsdir:-.}/$applet".tests |
| then | |
| : | |
| else | |