ash: significant overhaul of redirect saving logic
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 31 Jul 2017 02:09:19 +0000 (04:09 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 31 Jul 2017 02:21:46 +0000 (04:21 +0200)
commit035486c7500c09616a6c1040d8e70923532a5c2d
tree5af08692e5c5376d902d58843d994750eeca25c7
parent657e9005a9e31e1da094b260abaa8f335e92301f
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 <vda.linux@googlemail.com>
shell/ash.c
shell/ash_test/ash-redir/redir_script.tests
shell/ash_test/ash-redir/redir_to_bad_fd255.right [new file with mode: 0644]
shell/ash_test/ash-redir/redir_to_bad_fd255.tests [new file with mode: 0755]
shell/ash_test/ash-redir/redir_to_bad_fd3.right [new file with mode: 0644]
shell/ash_test/ash-redir/redir_to_bad_fd3.tests [new file with mode: 0755]
shell/hush_test/hush-redir/redir_script.tests
shell/hush_test/hush-redir/redir_to_bad_fd255.right [new file with mode: 0644]
shell/hush_test/hush-redir/redir_to_bad_fd255.tests [new file with mode: 0755]
shell/hush_test/hush-redir/redir_to_bad_fd3.right [new file with mode: 0644]
shell/hush_test/hush-redir/redir_to_bad_fd3.tests [new file with mode: 0755]