sh testsuite: create hush-redir/* and move files around
No binary (build failed)
—
(log yok)
| @@ -0,0 +1,12 @@ | |
| + | Test 0: var:ok |
| + | File created:ok |
| + | Test 1: var:ok |
| + | File created:ok |
| + | Test 2: var:ok |
| + | File created:ok |
| + | Test 3: var:ok |
| + | File created:ok |
| + | Test 4: var:ok |
| + | File created:ok |
| + | Test 5: var:ok |
| + | File created:ok |
| @@ -0,0 +1,40 @@ | |
| + | rm shell_test_$$ 2>/dev/null |
| + | var=bad |
| + | >shell_test_$$ var=ok |
| + | echo "Test 0: var:$var" |
| + | test -f shell_test_$$ && echo "File created:ok" |
| + | |
| + | rm shell_test_$$ 2>/dev/null |
| + | var=bad |
| + | var=ok >shell_test_$$ |
| + | echo "Test 1: var:$var" |
| + | test -f shell_test_$$ && echo "File created:ok" |
| + | |
| + | rm shell_test_$$ 2>/dev/null |
| + | var=ok |
| + | true | var=bad >shell_test_$$ |
| + | echo "Test 2: var:$var" |
| + | test -f shell_test_$$ && echo "File created:ok" |
| + | |
| + | rm shell_test_$$ 2>/dev/null |
| + | var=bad |
| + | { var=ok >shell_test_$$; } |
| + | echo "Test 3: var:$var" |
| + | test -f shell_test_$$ && echo "File created:ok" |
| + | |
| + | rm shell_test_$$ 2>/dev/null |
| + | var=ok |
| + | { var=bad >shell_test_$$; } & |
| + | # cant use usleep as it isnt standard in $PATH -- |
| + | # we fail when testing busybox compiled solely as "hush" |
| + | wait |
| + | echo "Test 4: var:$var" |
| + | test -f shell_test_$$ && echo "File created:ok" |
| + | |
| + | rm shell_test_$$ 2>/dev/null |
| + | var=ok |
| + | ( var=bad >shell_test_$$ ) |
| + | echo "Test 5: var:$var" |
| + | test -f shell_test_$$ && echo "File created:ok" |
| + | |
| + | rm shell_test_$$ 2>/dev/null |
| @@ -0,0 +1,3 @@ | |
| + | Ok |
| + | Ok |
| + | Done |
| @@ -0,0 +1,12 @@ | |
| + | # Chars above 0x7f are used as special codes. |
| + | # 0x81 is CTLESC (see ash.c). |
| + | # The bug was that quoting and unquoting of them |
| + | # was out of sync for redirect filenames. |
| + | |
| + | >unicode.sh |
| + | printf 'echo Ok >uni\x81code\n' >>unicode.sh |
| + | printf 'cat uni\x81code\n' >>unicode.sh |
| + | printf 'cat uni?code\n' >>unicode.sh |
| + | . ./unicode.sh |
| + | rm uni*code* |
| + | echo Done |
| @@ -0,0 +1,3 @@ | |
| + | Ok |
| + | Ok |
| + | Done |
| @@ -0,0 +1,15 @@ | |
| + | # Chars above 0x7f are used as special codes. |
| + | # 0x81 is CTLESC (see ash.c). |
| + | # The bug was that quoting and unquoting of them |
| + | # was out of sync for redirect filenames. |
| + | |
| + | # Subcase when redirect filename is specified in a variable. |
| + | |
| + | >unicode.sh |
| + | printf 'v=uni\x81code\n' >>unicode.sh |
| + | printf 'echo Ok >"$v"\n' >>unicode.sh |
| + | printf 'cat uni\x81code\n' >>unicode.sh |
| + | printf 'cat uni?code\n' >>unicode.sh |
| + | . ./unicode.sh |
| + | rm uni*code* |
| + | echo Done |
| @@ -0,0 +1,2 @@ | |
| + | Ok |
| + | Done:0 |
| @@ -0,0 +1,4 @@ | |
| + | echo Ok >file.tmp |
| + | cat 0<>file.tmp |
| + | echo Done:$? |
| + | rm file.tmp |
| @@ -0,0 +1,2 @@ | |
| + | tmp11 |
| + | tmp11 |
| @@ -0,0 +1,11 @@ | |
| + | x="tmp11:tmp22" |
| + | |
| + | # Bug was incorrectly expanding variables in >redir |
| + | echo "${x%:*}" >"${x%:*}" |
| + | echo tmp1* |
| + | rm tmp1* |
| + | |
| + | # Also try unquoted |
| + | echo "${x%:*}" >${x%:*} |
| + | echo tmp1* |
| + | rm tmp1* |
| @@ -0,0 +1 @@ | |
| + | Ok: script fd is not closed |
| @@ -0,0 +1,29 @@ | |
| + | # Builds a " 3>&- 4>&-" string. |
| + | # Note: one of these fds is a directory opened to /proc/self/fd |
| + | # for globbing. It is unwanted, but I don't know how to filter it out. |
| + | find_fds() { |
| + | fds="" |
| + | for f in /proc/self/fd/*; do |
| + | test "$f" = "/proc/self/fd/0" && continue |
| + | test "$f" = "/proc/self/fd/1" && continue |
| + | test "$f" = "/proc/self/fd/2" && continue |
| + | fds="$fds ${f##*/}>&-" |
| + | done |
| + | } |
| + | |
| + | find_fds |
| + | fds1="$fds" |
| + | |
| + | # One of the fds is open to the script body |
| + | # Close it while executing something. |
| + | eval "find_fds $fds" |
| + | |
| + | # Shell should not lose that fd. Did it? |
| + | find_fds |
| + | test x"$fds1" = x"$fds" && { echo "Ok: script fd is not closed"; exit 0; } |
| + | |
| + | echo "Bug: script fd is closed" |
| + | echo "fds1:$fds1" |
| + | echo "fds2:$fds" |
| + | exit 1 |
| + | |
| @@ -0,0 +1,3 @@ | |
| + | z1.tmp: 1 |
| + | z2.tmp: 1 |
| + | "z1.tmp z2.tmp": TEST 0 |
| @@ -0,0 +1,6 @@ | |
| + | v='z1.tmp z2.tmp' |
| + | echo TEST >$v |
| + | echo 'z1.tmp:' `cat 'z1.tmp' 2>/dev/null; echo $?` |
| + | echo 'z2.tmp:' `cat 'z2.tmp' 2>/dev/null; echo $?` |
| + | echo '"z1.tmp z2.tmp":' `cat 'z1.tmp z2.tmp' 2>/dev/null; echo $?` |
| + | rm z*.tmp |