busybox/libbb
Denys Vlasenko 41ef41b3e0 hush: fix nested redirects colliding with script fds
This necessitates switch from libc FILE api to a simple
homegrown replacement.
The change which fixes the bug here is the deleting of

	restore_redirected_FILEs();

line. It was prematurely moving (restoring) script fd#3.
The fix is: we don't even _want_ to restore scrit fds,
we are perfectly fine with them being moved.
The only reason we tried to restore them is that FILE api
did not allow moving of FILE->fd.

function                                             old     new   delta
refill_HFILE_and_getc                                  -      93     +93
hfopen                                                 -      90     +90
hfclose                                                -      66     +66
pseudo_exec_argv                                     591     597      +6
hush_main                                           1089    1095      +6
builtin_source                                       209     214      +5
save_fd_on_redirect                                  197     200      +3
setup_redirects                                      320     321      +1
fgetc_interactive                                    235     236      +1
i_peek_and_eat_bkslash_nl                             99      97      -2
expand_vars_to_list                                 1103    1100      -3
restore_redirects                                     99      52     -47
fclose_and_forget                                     57       -     -57
remember_FILE                                         63       -     -63
------------------------------------------------------------------------------
(add/remove: 3/2 grow/shrink: 6/3 up/down: 271/-172)           Total: 99 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-07-24 16:54:41 +02:00
..
appletlib.c whitespace fixes 2018-07-17 15:04:17 +02:00
ask_confirmation.c xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy 2018-04-07 15:23:10 +02:00
auto_string.c
bb_askpass.c libbb: switch bb_ask_noecho() to "mallocing" string return API 2018-04-07 15:50:30 +02:00
bb_bswap_64.c
bb_cat.c
bb_do_delay.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
bb_getgroups.c
bb_getsockname.c libbb: introduce and use bb_getsockname() 2018-02-11 14:55:46 +01:00
bb_pwd.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
bb_qsort.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
bb_strtod.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
bb_strtonum.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
bbunit.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
capability.c libbb: compile capability code only if FEATURE_SETPRIV_CAPABILITIES or RUN_INIT 2018-02-21 20:13:39 +01:00
change_identity.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
chomp.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
common_bufsiz.c
compare_string_array.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
concat_path_file.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
concat_subpath_file.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
Config.src restore documentation on the build config language 2018-06-06 15:16:48 +02:00
copy_file.c cp: optional --reflink support 2018-07-13 20:30:02 +02:00
copyfd.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
correct_password.c libbb: rename bb_ask -> bb_ask_noecho, bb_ask_confirmation -> bb_ask_y_confirmation 2018-04-07 15:08:12 +02:00
crc32.c libbb: commonalize a bit of little-endian CRC32 table generation code 2018-02-01 10:56:19 +01:00
default_error_retval.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
device_open.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
die_if_bad_username.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
dump.c hexdump: fix short file of zero butes treated as dup 2018-07-03 16:29:06 +02:00
endofname.c
executable.c which: fix TODO with NOFORK+malloc_failure misbehaving 2018-01-12 13:21:33 +01:00
fclose_nonstdin.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
fflush_stdout_and_exit.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
fgets_str.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
find_mount_point.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
find_pid_by_name.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
find_root_device.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
full_write.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
get_console.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
get_cpu_count.c
get_last_path_component.c
get_line_from_file.c libbb: new function bb_die_memory_exhausted 2018-04-01 19:59:37 +02:00
get_shell_name.c
get_volsize.c
getopt32.c hush: GETOPT_RESET() _after_ getopts too. 2017-08-29 14:32:17 +02:00
getopt_allopts.c
getpty.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
hash_md5_sha.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
hash_md5prime.c
herror_msg.c
human_readable.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
in_ether.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
inet_cksum.c
inet_common.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
inode_hash.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
isdirectory.c do not include <sys/stat.h> just before "libbb.h", it's there already 2017-10-05 14:41:36 +02:00
isqrt.c
Kbuild.src libbb: compile obscure() only if FEATURE_PASSWD_WEAK_CHECK=y 2018-01-04 15:21:25 +01:00
kernel_version.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
last_char_is.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
lineedit_ptr_hack.c
lineedit.c hush: fix "unset PS1/PS2", and put them into initial variable set 2018-04-06 17:58:21 +02:00
llist.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
logenv.c
login.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
loop.c testsuite/mount.tests: fix false positive 2018-06-28 14:10:00 +02:00
make_directory.c fix compile failure in previous commit 2018-02-06 18:01:39 +01:00
makedev.c
match_fstype.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
messages.c which: fix TODO with NOFORK+malloc_failure misbehaving 2018-01-12 13:21:33 +01:00
missing_syscalls.c make busybox more portable 2018-03-04 23:15:59 +01:00
mode_string.c do not include <sys/stat.h> just before "libbb.h", it's there already 2017-10-05 14:41:36 +02:00
mtab.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
nuke_str.c whitespace fixes 2018-07-17 15:04:17 +02:00
obscure.c
parse_config.c getopt32: remove opt_complementary 2017-08-08 21:55:02 +02:00
parse_mode.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
percent_decode.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
perror_msg.c
perror_nomsg_and_die.c
perror_nomsg.c
pidfile.c
platform.c
print_flags.c whitespace and comment format fixes, no code changes 2017-10-05 15:33:28 +02:00
print_numbered_lines.c
printable_string.c
printable.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
process_escape_sequence.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
procps.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
progress.c progress meter: add disabled code for a more stable ETA 2018-02-13 16:48:52 +01:00
ptr_to_globals.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
pw_encrypt_des.c
pw_encrypt_md5.c
pw_encrypt_sha.c
pw_encrypt.c libbb: crypt() in newer glibc requires include <crypt.h> 2018-06-27 09:45:20 +02:00
read_key.c
read_printf.c
read.c
README
recursive_action.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
remove_file.c xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy 2018-04-07 15:23:10 +02:00
replace.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
rtc.c
run_shell.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
safe_gethostname.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
safe_poll.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
safe_strncpy.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
safe_write.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
securetty.c
selinux_common.c
setup_environment.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
signals.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
simplify_path.c
single_argv.c
skip_whitespace.c libbb: Use return value from is_prefixed_with() 2018-02-27 13:35:40 +01:00
speed_table.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
str_tolower.c
strrstr.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
sysconf.c
time.c
trim.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
u_signal_names.c regularize format of source file headers, no code changes 2017-09-18 16:28:43 +02:00
ubi.c
udp_io.c udp_io, traceroute: Standardise IPv6 PKTINFO handling to be portable 2017-10-30 16:06:50 +01:00
unicode.c
update_passwd.c
utmp.c
uuencode.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
verror_msg.c
vfork_daemon_rexec.c make busybox more portable 2018-03-04 23:15:59 +01:00
warn_ignoring_args.c
wfopen_input.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
wfopen.c libbb: new function bb_die_memory_exhausted 2018-04-01 19:59:37 +02:00
write.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
xatonum_template.c
xatonum.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
xconnect.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
xfunc_die.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
xfuncs_printf.c hush: fix nested redirects colliding with script fds 2018-07-24 16:54:41 +02:00
xfuncs.c less: fix fallout from "use common routine to set raw termios" 2018-04-16 10:24:48 +02:00
xgetcwd.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
xgethostbyname.c
xreadlink.c whitespace fix 2018-05-26 17:42:00 +02:00
xrealloc_vector.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00
xregcomp.c whitespace and comment format fixes, no code changes 2017-10-05 14:40:24 +02:00

Please see the LICENSE file for copyright information (GPLv2)

libbb is BusyBox's utility library.  All of this stuff used to be stuffed into
a single file named utility.c.  When I split utility.c to create libbb, some of
the very oldest stuff ended up without their original copyright and licensing
information (which is now lost in the mists of time).  If you see something
that you wrote that is mis-attributed, do let me know so we can fix that up.

	Erik Andersen
	<andersen@codepoet.org>