From 035486c7500c09616a6c1040d8e70923532a5c2d Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 31 Jul 2017 04:09:19 +0200 Subject: ash: significant overhaul of redirect saving logic New code is similar to what hush is doing. Make CLOSED to -1: same as dash. popredir() loses "restore" parameter: same as dash. COPYFD_RESTORE bit is no longer necessary. This change fixes this interactive bug: $ ls -l /proc/$$/fd 10>&- ash: can't set tty process group: Bad file descriptor ash: can't set tty process group: Bad file descriptor [1]+ Done(2) ls -l /proc/${\$}/fd 10>&4294967295 function old new delta unwindredir 29 27 -2 tryexec 154 152 -2 evaltree 503 501 -2 evalcommand 1369 1367 -2 cmdloop 187 185 -2 redirect 1029 1018 -11 popredir 153 123 -30 need_to_remember 36 - -36 is_hidden_fd 68 - -68 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 0/7 up/down: 0/-155) Total: -155 bytes text data bss dec hex filename 914572 485 6848 921905 e1131 busybox_old 914553 485 6848 921886 e111e busybox_unstripped Signed-off-by: Denys Vlasenko --- shell/hush_test/hush-redir/redir_script.tests | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'shell/hush_test/hush-redir/redir_script.tests') diff --git a/shell/hush_test/hush-redir/redir_script.tests b/shell/hush_test/hush-redir/redir_script.tests index ccc497d7b..740daa461 100755 --- a/shell/hush_test/hush-redir/redir_script.tests +++ b/shell/hush_test/hush-redir/redir_script.tests @@ -20,10 +20,15 @@ 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; } +test x"$fds1" = x"$fds" \ +&& { echo "Ok: script fd is not closed"; exit 0; } + +# One legit way to handle it is to move script fd. For example, if we see that fd 10 moved to fd 11: +test x"$fds1" = x" 10>&- 3>&-" && \ +test x"$fds" = x" 11>&- 3>&-" \ +&& { echo "Ok: script fd is not closed"; exit 0; } echo "Bug: script fd is closed" echo "fds1:$fds1" echo "fds2:$fds" exit 1 - -- cgit v1.2.3