diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-11-16 01:28:11 +0300 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-11-16 01:28:11 +0300 |
commit | a7ccdeef396700d1ed78b9f97de0d10c706b169f (patch) | |
tree | 4ef45efdaaac81d2a4c31b16d9cc36ba2d3a22e1 /shell | |
parent | 647553a4fcbbc169b4390d9ef8e4657f0ffe1a5f (diff) |
libbb: added xfdopen_for_read/write
function old new delta
xfdopen_helper - 40 +40
logdir_open 1163 1184 +21
process_stdin 433 443 +10
xfdopen_for_write - 9 +9
doCommands 2465 2474 +9
patch_main 1214 1222 +8
bbunpack 457 465 +8
xfdopen_for_read - 7 +7
scan_tree 258 262 +4
xstrtoul_range_sfx 230 231 +1
sendmail_main 957 955 -2
passwd_main 1027 1023 -4
parse 969 964 -5
test_main 253 247 -6
sed_main 655 649 -6
dos2unix_main 437 429 -8
fbsplash_main 950 938 -12
handle_dir_common 371 354 -17
expand_vars_to_list 2197 2169 -28
update_passwd 1275 1246 -29
------------------------------------------------------------------------------
(add/remove: 3/0 grow/shrink: 7/10 up/down: 117/-117) Total: 0 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/shell/hush.c b/shell/hush.c index 6f394d1d5..ede8d680e 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -5301,25 +5301,22 @@ static FILE *generate_stream_from_string(const char *s, pid_t *pid_p) free(to_free); # endif close(channel[1]); -//TODO: libbb: fdopen_or_die? - return fdopen(channel[0], "r"); + close_on_exec_on(channel[0]); + return xfdopen_for_read(channel[0]); } /* Return code is exit status of the process that is run. */ static int process_command_subs(o_string *dest, const char *s) { - FILE *pf; + FILE *fp; struct in_str pipe_str; pid_t pid; int status, ch, eol_cnt; - pf = generate_stream_from_string(s, &pid); - if (pf == NULL) - return 1; - close_on_exec_on(fileno(pf)); + fp = generate_stream_from_string(s, &pid); /* Now send results of command back into original context */ - setup_file_in_str(&pipe_str, pf); + setup_file_in_str(&pipe_str, fp); eol_cnt = 0; while ((ch = i_getch(&pipe_str)) != EOF) { if (ch == '\n') { @@ -5334,7 +5331,7 @@ static int process_command_subs(o_string *dest, const char *s) } debug_printf("done reading from `cmd` pipe, closing it\n"); - fclose(pf); + fclose(fp); /* We need to extract exitcode. Test case * "true; echo `sleep 1; false` $?" * should print 1 */ |