diff options
author | Pascal Bellard <pascal.bellard@ads-lu.com> | 2010-07-04 00:57:03 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-04 00:57:03 +0200 |
commit | 21e8e8da6483c80a6054b06e48341968a7dccdd5 (patch) | |
tree | 9980dc076107930f9706733c7cbedcf0e4099877 | |
parent | 7c1b2b5420d4208864b8bc6e07e90792aed94981 (diff) | |
download | busybox-w32-21e8e8da6483c80a6054b06e48341968a7dccdd5.tar.gz busybox-w32-21e8e8da6483c80a6054b06e48341968a7dccdd5.tar.bz2 busybox-w32-21e8e8da6483c80a6054b06e48341968a7dccdd5.zip |
libbb: introduce and use BB_EXECVP_or_die()
function old new delta
BB_EXECVP_or_die - 47 +47
time_main 1042 1043 +1
chrt_main 371 364 -7
ionice_main 292 282 -10
setsid_main 69 56 -13
nohup_main 236 223 -13
cttyhack_main 266 253 -13
chroot_main 94 81 -13
chpst_main 746 733 -13
timeout_main 297 279 -18
taskset_main 541 522 -19
vfork_child 67 45 -22
parse 975 953 -22
lpd_main 770 748 -22
launch_helper 192 170 -22
tcpudpsvd_main 1810 1782 -28
nice_main 190 156 -34
env_main 242 206 -36
run_command 221 174 -47
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/17 up/down: 48/-352) Total: -304 bytes
Signed-off-by: Pascal Bellard <pascal.bellard@ads-lu.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | console-tools/openvt.c | 3 | ||||
-rw-r--r-- | coreutils/chroot.c | 3 | ||||
-rw-r--r-- | coreutils/env.c | 5 | ||||
-rw-r--r-- | coreutils/nice.c | 5 | ||||
-rw-r--r-- | coreutils/nohup.c | 3 | ||||
-rw-r--r-- | include/libbb.h | 1 | ||||
-rw-r--r-- | libbb/execable.c | 8 | ||||
-rw-r--r-- | libbb/vfork_daemon_rexec.c | 34 | ||||
-rw-r--r-- | libbb/xfuncs.c | 34 | ||||
-rw-r--r-- | mailutils/mail.c | 3 | ||||
-rw-r--r-- | mailutils/mime.c | 3 | ||||
-rw-r--r-- | miscutils/chrt.c | 3 | ||||
-rw-r--r-- | miscutils/ionice.c | 3 | ||||
-rw-r--r-- | miscutils/setsid.c | 3 | ||||
-rw-r--r-- | miscutils/taskset.c | 3 | ||||
-rw-r--r-- | miscutils/time.c | 15 | ||||
-rw-r--r-- | miscutils/timeout.c | 3 | ||||
-rw-r--r-- | networking/ifupdown.c | 3 | ||||
-rw-r--r-- | networking/tcpudp.c | 4 | ||||
-rw-r--r-- | printutils/lpd.c | 3 | ||||
-rw-r--r-- | runit/chpst.c | 3 | ||||
-rw-r--r-- | shell/cttyhack.c | 3 |
22 files changed, 67 insertions, 81 deletions
diff --git a/console-tools/openvt.c b/console-tools/openvt.c index 6f58916e7..e3ea71bc5 100644 --- a/console-tools/openvt.c +++ b/console-tools/openvt.c | |||
@@ -97,8 +97,7 @@ static NOINLINE void vfork_child(char **argv) | |||
97 | //bb_error_msg("our pgrp %d", getpgrp()); | 97 | //bb_error_msg("our pgrp %d", getpgrp()); |
98 | //bb_error_msg("VT's sid %d", tcgetsid(0)); | 98 | //bb_error_msg("VT's sid %d", tcgetsid(0)); |
99 | //bb_error_msg("VT's pgrp %d", tcgetpgrp(0)); | 99 | //bb_error_msg("VT's pgrp %d", tcgetpgrp(0)); |
100 | BB_EXECVP(argv[0], argv); | 100 | BB_EXECVP_or_die(argv); |
101 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
102 | } | 101 | } |
103 | } | 102 | } |
104 | 103 | ||
diff --git a/coreutils/chroot.c b/coreutils/chroot.c index bc0b1f82c..046c2fabf 100644 --- a/coreutils/chroot.c +++ b/coreutils/chroot.c | |||
@@ -30,6 +30,5 @@ int chroot_main(int argc UNUSED_PARAM, char **argv) | |||
30 | argv[1] = (char *) "-i"; | 30 | argv[1] = (char *) "-i"; |
31 | } | 31 | } |
32 | 32 | ||
33 | BB_EXECVP(argv[0], argv); | 33 | BB_EXECVP_or_die(argv); |
34 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
35 | } | 34 | } |
diff --git a/coreutils/env.c b/coreutils/env.c index c6ba04d35..d4eab191b 100644 --- a/coreutils/env.c +++ b/coreutils/env.c | |||
@@ -77,10 +77,7 @@ int env_main(int argc UNUSED_PARAM, char **argv) | |||
77 | } | 77 | } |
78 | 78 | ||
79 | if (argv[0]) { | 79 | if (argv[0]) { |
80 | BB_EXECVP(argv[0], argv); | 80 | BB_EXECVP_or_die(argv); |
81 | /* SUSv3-mandated exit codes. */ | ||
82 | xfunc_error_retval = (errno == ENOENT) ? 127 : 126; | ||
83 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
84 | } | 81 | } |
85 | 82 | ||
86 | if (environ) { /* clearenv() may set environ == NULL! */ | 83 | if (environ) { /* clearenv() may set environ == NULL! */ |
diff --git a/coreutils/nice.c b/coreutils/nice.c index 0f70f1079..ff3eb1140 100644 --- a/coreutils/nice.c +++ b/coreutils/nice.c | |||
@@ -47,8 +47,5 @@ int nice_main(int argc, char **argv) | |||
47 | } | 47 | } |
48 | } | 48 | } |
49 | 49 | ||
50 | BB_EXECVP(argv[0], argv); | 50 | BB_EXECVP_or_die(argv); |
51 | /* The exec failed... */ | ||
52 | xfunc_error_retval = (errno == ENOENT) ? 127 : 126; /* SUSv3 */ | ||
53 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
54 | } | 51 | } |
diff --git a/coreutils/nohup.c b/coreutils/nohup.c index 1027ada1c..3dc531409 100644 --- a/coreutils/nohup.c +++ b/coreutils/nohup.c | |||
@@ -76,6 +76,5 @@ int nohup_main(int argc UNUSED_PARAM, char **argv) | |||
76 | signal(SIGHUP, SIG_IGN); | 76 | signal(SIGHUP, SIG_IGN); |
77 | 77 | ||
78 | argv++; | 78 | argv++; |
79 | BB_EXECVP(argv[0], argv); | 79 | BB_EXECVP_or_die(argv); |
80 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
81 | } | 80 | } |
diff --git a/include/libbb.h b/include/libbb.h index e26001705..4b6699f2f 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -839,6 +839,7 @@ int bb_execvp(const char *file, char *const argv[]) FAST_FUNC; | |||
839 | #define BB_EXECVP(prog,cmd) execvp(prog,cmd) | 839 | #define BB_EXECVP(prog,cmd) execvp(prog,cmd) |
840 | #define BB_EXECLP(prog,cmd,...) execlp(prog,cmd, __VA_ARGS__) | 840 | #define BB_EXECLP(prog,cmd,...) execlp(prog,cmd, __VA_ARGS__) |
841 | #endif | 841 | #endif |
842 | int BB_EXECVP_or_die(char **argv) NORETURN FAST_FUNC; | ||
842 | 843 | ||
843 | /* NOMMU friendy fork+exec: */ | 844 | /* NOMMU friendy fork+exec: */ |
844 | pid_t spawn(char **argv) FAST_FUNC; | 845 | pid_t spawn(char **argv) FAST_FUNC; |
diff --git a/libbb/execable.c b/libbb/execable.c index 5c7ac16a2..82241cd81 100644 --- a/libbb/execable.c +++ b/libbb/execable.c | |||
@@ -76,3 +76,11 @@ int FAST_FUNC bb_execvp(const char *file, char *const argv[]) | |||
76 | argv); | 76 | argv); |
77 | } | 77 | } |
78 | #endif | 78 | #endif |
79 | |||
80 | int FAST_FUNC BB_EXECVP_or_die(char **argv) | ||
81 | { | ||
82 | BB_EXECVP(argv[0], argv); | ||
83 | /* SUSv3-mandated exit codes */ | ||
84 | xfunc_error_retval = (errno == ENOENT) ? 127 : 126; | ||
85 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
86 | } | ||
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 082f0f63e..8102ea2dc 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c | |||
@@ -67,40 +67,6 @@ pid_t FAST_FUNC xspawn(char **argv) | |||
67 | return pid; | 67 | return pid; |
68 | } | 68 | } |
69 | 69 | ||
70 | pid_t FAST_FUNC safe_waitpid(pid_t pid, int *wstat, int options) | ||
71 | { | ||
72 | pid_t r; | ||
73 | |||
74 | do | ||
75 | r = waitpid(pid, wstat, options); | ||
76 | while ((r == -1) && (errno == EINTR)); | ||
77 | return r; | ||
78 | } | ||
79 | |||
80 | pid_t FAST_FUNC wait_any_nohang(int *wstat) | ||
81 | { | ||
82 | return safe_waitpid(-1, wstat, WNOHANG); | ||
83 | } | ||
84 | |||
85 | // Wait for the specified child PID to exit, returning child's error return. | ||
86 | int FAST_FUNC wait4pid(pid_t pid) | ||
87 | { | ||
88 | int status; | ||
89 | |||
90 | if (pid <= 0) { | ||
91 | /*errno = ECHILD; -- wrong. */ | ||
92 | /* we expect errno to be already set from failed [v]fork/exec */ | ||
93 | return -1; | ||
94 | } | ||
95 | if (safe_waitpid(pid, &status, 0) == -1) | ||
96 | return -1; | ||
97 | if (WIFEXITED(status)) | ||
98 | return WEXITSTATUS(status); | ||
99 | if (WIFSIGNALED(status)) | ||
100 | return WTERMSIG(status) + 0x180; | ||
101 | return 0; | ||
102 | } | ||
103 | |||
104 | #if ENABLE_FEATURE_PREFER_APPLETS | 70 | #if ENABLE_FEATURE_PREFER_APPLETS |
105 | void FAST_FUNC save_nofork_data(struct nofork_save_area *save) | 71 | void FAST_FUNC save_nofork_data(struct nofork_save_area *save) |
106 | { | 72 | { |
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 65437211d..275dd4b62 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
@@ -268,3 +268,37 @@ int FAST_FUNC tcsetattr_stdin_TCSANOW(const struct termios *tp) | |||
268 | { | 268 | { |
269 | return tcsetattr(STDIN_FILENO, TCSANOW, tp); | 269 | return tcsetattr(STDIN_FILENO, TCSANOW, tp); |
270 | } | 270 | } |
271 | |||
272 | pid_t FAST_FUNC safe_waitpid(pid_t pid, int *wstat, int options) | ||
273 | { | ||
274 | pid_t r; | ||
275 | |||
276 | do | ||
277 | r = waitpid(pid, wstat, options); | ||
278 | while ((r == -1) && (errno == EINTR)); | ||
279 | return r; | ||
280 | } | ||
281 | |||
282 | pid_t FAST_FUNC wait_any_nohang(int *wstat) | ||
283 | { | ||
284 | return safe_waitpid(-1, wstat, WNOHANG); | ||
285 | } | ||
286 | |||
287 | // Wait for the specified child PID to exit, returning child's error return. | ||
288 | int FAST_FUNC wait4pid(pid_t pid) | ||
289 | { | ||
290 | int status; | ||
291 | |||
292 | if (pid <= 0) { | ||
293 | /*errno = ECHILD; -- wrong. */ | ||
294 | /* we expect errno to be already set from failed [v]fork/exec */ | ||
295 | return -1; | ||
296 | } | ||
297 | if (safe_waitpid(pid, &status, 0) == -1) | ||
298 | return -1; | ||
299 | if (WIFEXITED(status)) | ||
300 | return WEXITSTATUS(status); | ||
301 | if (WIFSIGNALED(status)) | ||
302 | return WTERMSIG(status) + 0x180; | ||
303 | return 0; | ||
304 | } | ||
diff --git a/mailutils/mail.c b/mailutils/mail.c index 49e72c32b..5eb99e13d 100644 --- a/mailutils/mail.c +++ b/mailutils/mail.c | |||
@@ -67,8 +67,7 @@ void FAST_FUNC launch_helper(const char **argv) | |||
67 | if (!G.helper_pid) { | 67 | if (!G.helper_pid) { |
68 | // child: try to execute connection helper | 68 | // child: try to execute connection helper |
69 | // NB: SIGCHLD & SIGALRM revert to SIG_DFL on exec | 69 | // NB: SIGCHLD & SIGALRM revert to SIG_DFL on exec |
70 | BB_EXECVP(argv[0], (char **)argv); | 70 | BB_EXECVP_or_die((char**)argv); |
71 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
72 | } | 71 | } |
73 | 72 | ||
74 | // parent | 73 | // parent |
diff --git a/mailutils/mime.c b/mailutils/mime.c index 654b8731c..5eb8ef6f2 100644 --- a/mailutils/mime.c +++ b/mailutils/mime.c | |||
@@ -288,8 +288,7 @@ static int parse(const char *boundary, char **argv) | |||
288 | xsetenv("CHARSET", charset); | 288 | xsetenv("CHARSET", charset); |
289 | xsetenv("ENCODING", encoding); | 289 | xsetenv("ENCODING", encoding); |
290 | xsetenv("FILENAME", filename); | 290 | xsetenv("FILENAME", filename); |
291 | BB_EXECVP(argv[0], argv); | 291 | BB_EXECVP_or_die(argv); |
292 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
293 | } | 292 | } |
294 | // parent dumps to fd[1] | 293 | // parent dumps to fd[1] |
295 | close(fd[0]); | 294 | close(fd[0]); |
diff --git a/miscutils/chrt.c b/miscutils/chrt.c index 3d0da58ca..d5f87c4d7 100644 --- a/miscutils/chrt.c +++ b/miscutils/chrt.c | |||
@@ -120,6 +120,5 @@ int chrt_main(int argc UNUSED_PARAM, char **argv) | |||
120 | if (!argv[0]) /* "-p <priority> <pid> [...]" */ | 120 | if (!argv[0]) /* "-p <priority> <pid> [...]" */ |
121 | goto print_rt_info; | 121 | goto print_rt_info; |
122 | 122 | ||
123 | BB_EXECVP(argv[0], argv); | 123 | BB_EXECVP_or_die(argv); |
124 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
125 | } | 124 | } |
diff --git a/miscutils/ionice.c b/miscutils/ionice.c index 8393cd8b2..52e51b908 100644 --- a/miscutils/ionice.c +++ b/miscutils/ionice.c | |||
@@ -90,8 +90,7 @@ int ionice_main(int argc UNUSED_PARAM, char **argv) | |||
90 | if (ioprio_set(IOPRIO_WHO_PROCESS, pid, pri) == -1) | 90 | if (ioprio_set(IOPRIO_WHO_PROCESS, pid, pri) == -1) |
91 | bb_perror_msg_and_die("ioprio_%cet", 's'); | 91 | bb_perror_msg_and_die("ioprio_%cet", 's'); |
92 | if (argv[0]) { | 92 | if (argv[0]) { |
93 | BB_EXECVP(argv[0], argv); | 93 | BB_EXECVP_or_die(argv); |
94 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
95 | } | 94 | } |
96 | } | 95 | } |
97 | 96 | ||
diff --git a/miscutils/setsid.c b/miscutils/setsid.c index 60ee062e3..c573fae34 100644 --- a/miscutils/setsid.c +++ b/miscutils/setsid.c | |||
@@ -45,6 +45,5 @@ int setsid_main(int argc UNUSED_PARAM, char **argv) | |||
45 | } | 45 | } |
46 | 46 | ||
47 | argv++; | 47 | argv++; |
48 | BB_EXECVP(argv[0], argv); | 48 | BB_EXECVP_or_die(argv); |
49 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
50 | } | 49 | } |
diff --git a/miscutils/taskset.c b/miscutils/taskset.c index 2891003df..08198d5d4 100644 --- a/miscutils/taskset.c +++ b/miscutils/taskset.c | |||
@@ -132,6 +132,5 @@ int taskset_main(int argc UNUSED_PARAM, char **argv) | |||
132 | if (!argv[0]) /* "-p <aff> <pid> [...ignored...]" */ | 132 | if (!argv[0]) /* "-p <aff> <pid> [...ignored...]" */ |
133 | goto print_aff; /* print new affinity and exit */ | 133 | goto print_aff; /* print new affinity and exit */ |
134 | 134 | ||
135 | BB_EXECVP(argv[0], argv); | 135 | BB_EXECVP_or_die(argv); |
136 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
137 | } | 136 | } |
diff --git a/miscutils/time.c b/miscutils/time.c index f5d1e15fb..5cfbcef8e 100644 --- a/miscutils/time.c +++ b/miscutils/time.c | |||
@@ -367,20 +367,17 @@ static void summarize(const char *fmt, char **command, resource_t *resp) | |||
367 | Put the statistics in *RESP. */ | 367 | Put the statistics in *RESP. */ |
368 | static void run_command(char *const *cmd, resource_t *resp) | 368 | static void run_command(char *const *cmd, resource_t *resp) |
369 | { | 369 | { |
370 | pid_t pid; /* Pid of child. */ | 370 | pid_t pid; |
371 | void (*interrupt_signal)(int); | 371 | void (*interrupt_signal)(int); |
372 | void (*quit_signal)(int); | 372 | void (*quit_signal)(int); |
373 | 373 | ||
374 | resp->elapsed_ms = monotonic_ms(); | 374 | resp->elapsed_ms = monotonic_ms(); |
375 | pid = vfork(); /* Run CMD as child process. */ | 375 | pid = vfork(); |
376 | if (pid < 0) | 376 | if (pid < 0) |
377 | bb_perror_msg_and_die("fork"); | 377 | bb_perror_msg_and_die("vfork"); |
378 | if (pid == 0) { /* If child. */ | 378 | if (pid == 0) { |
379 | /* Don't cast execvp arguments; that causes errors on some systems, | 379 | /* Child */ |
380 | versus merely warnings if the cast is left off. */ | 380 | BB_EXECVP_or_die((char**)cmd); |
381 | BB_EXECVP(cmd[0], cmd); | ||
382 | xfunc_error_retval = (errno == ENOENT ? 127 : 126); | ||
383 | bb_perror_msg_and_die("can't execute '%s'", cmd[0]); | ||
384 | } | 381 | } |
385 | 382 | ||
386 | /* Have signals kill the child but not self (if possible). */ | 383 | /* Have signals kill the child but not self (if possible). */ |
diff --git a/miscutils/timeout.c b/miscutils/timeout.c index 273d26953..f6e655acc 100644 --- a/miscutils/timeout.c +++ b/miscutils/timeout.c | |||
@@ -110,6 +110,5 @@ int timeout_main(int argc UNUSED_PARAM, char **argv) | |||
110 | argv[0] = sv1; | 110 | argv[0] = sv1; |
111 | argv[1] = sv2; | 111 | argv[1] = sv2; |
112 | #endif | 112 | #endif |
113 | BB_EXECVP(argv[0], argv); | 113 | BB_EXECVP_or_die(argv); |
114 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
115 | } | 114 | } |
diff --git a/networking/ifupdown.c b/networking/ifupdown.c index 714d2a107..1bab2c5cb 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c | |||
@@ -1052,8 +1052,7 @@ static int popen2(FILE **in, FILE **out, char *command, char *param) | |||
1052 | close(outfd.rd); | 1052 | close(outfd.rd); |
1053 | xmove_fd(infd.rd, 0); | 1053 | xmove_fd(infd.rd, 0); |
1054 | xmove_fd(outfd.wr, 1); | 1054 | xmove_fd(outfd.wr, 1); |
1055 | BB_EXECVP(command, argv); | 1055 | BB_EXECVP_or_die(argv); |
1056 | bb_perror_msg_and_die("can't execute '%s'", command); | ||
1057 | } | 1056 | } |
1058 | /* parent */ | 1057 | /* parent */ |
1059 | close(infd.rd); | 1058 | close(infd.rd); |
diff --git a/networking/tcpudp.c b/networking/tcpudp.c index 4e4756738..53e622b56 100644 --- a/networking/tcpudp.c +++ b/networking/tcpudp.c | |||
@@ -501,10 +501,10 @@ int tcpudpsvd_main(int argc UNUSED_PARAM, char **argv) | |||
501 | #ifdef SSLSVD | 501 | #ifdef SSLSVD |
502 | strcpy(id, utoa(pid)); | 502 | strcpy(id, utoa(pid)); |
503 | ssl_io(0, argv); | 503 | ssl_io(0, argv); |
504 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
504 | #else | 505 | #else |
505 | BB_EXECVP(argv[0], argv); | 506 | BB_EXECVP_or_die(argv); |
506 | #endif | 507 | #endif |
507 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
508 | } | 508 | } |
509 | 509 | ||
510 | /* | 510 | /* |
diff --git a/printutils/lpd.c b/printutils/lpd.c index 15f1ba20b..d91491f1b 100644 --- a/printutils/lpd.c +++ b/printutils/lpd.c | |||
@@ -181,8 +181,7 @@ int lpd_main(int argc UNUSED_PARAM, char *argv[]) | |||
181 | // this call reopens stdio fds to "/dev/null" | 181 | // this call reopens stdio fds to "/dev/null" |
182 | // (no daemonization is done) | 182 | // (no daemonization is done) |
183 | bb_daemonize_or_rexec(DAEMON_DEVNULL_STDIO | DAEMON_ONLY_SANITIZE, NULL); | 183 | bb_daemonize_or_rexec(DAEMON_DEVNULL_STDIO | DAEMON_ONLY_SANITIZE, NULL); |
184 | BB_EXECVP(argv[0], argv); | 184 | BB_EXECVP_or_die(argv); |
185 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
186 | } | 185 | } |
187 | 186 | ||
188 | // validate input. | 187 | // validate input. |
diff --git a/runit/chpst.c b/runit/chpst.c index 028a28d6c..ad0811294 100644 --- a/runit/chpst.c +++ b/runit/chpst.c | |||
@@ -382,6 +382,5 @@ int chpst_main(int argc UNUSED_PARAM, char **argv) | |||
382 | if (opt & OPT_2) | 382 | if (opt & OPT_2) |
383 | close(STDERR_FILENO); | 383 | close(STDERR_FILENO); |
384 | 384 | ||
385 | BB_EXECVP(argv[0], argv); | 385 | BB_EXECVP_or_die(argv); |
386 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
387 | } | 386 | } |
diff --git a/shell/cttyhack.c b/shell/cttyhack.c index bde2acdc9..67736ad62 100644 --- a/shell/cttyhack.c +++ b/shell/cttyhack.c | |||
@@ -81,6 +81,5 @@ int cttyhack_main(int argc UNUSED_PARAM, char **argv) | |||
81 | } | 81 | } |
82 | } | 82 | } |
83 | 83 | ||
84 | BB_EXECVP(argv[0], argv); | 84 | BB_EXECVP_or_die(argv); |
85 | bb_perror_msg_and_die("can't execute '%s'", argv[0]); | ||
86 | } | 85 | } |