X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fenv.c;h=fd58a23da823b4a5104e4298465c7ff3348e918d;hb=e135a5d746c4f163f191e12b527636b0345e1456;hp=87ab30cdd3977c18563e58a01c55e2aa05a2c2fe;hpb=7ff33f1b42a913e4e02788dfa15f36ba853a3b51;p=oweals%2Fbusybox.git diff --git a/coreutils/env.c b/coreutils/env.c index 87ab30cdd..fd58a23da 100644 --- a/coreutils/env.c +++ b/coreutils/env.c @@ -38,7 +38,7 @@ * - correct "-" option usage * - multiple "-u unsetenv" support * - GNU long option support - * - save errno after exec failed before bb_perror_msg() + * - use bb_default_error_retval */ @@ -47,7 +47,7 @@ #include #include #include -#include +#include /* struct option */ #include "busybox.h" @@ -57,15 +57,16 @@ static const struct option env_long_options[] = { { 0, 0, 0, 0 } }; -extern int env_main(int argc, char** argv) +int env_main(int argc, char** argv) { + static char *cleanenv[1] = { NULL }; + char **ep, *p; - char *cleanenv[1] = { NULL }; unsigned long opt; llist_t *unset_env = NULL; extern char **environ; - bb_opt_complementaly = "u*"; + bb_opt_complementally = "u::"; bb_applet_long_options = env_long_options; opt = bb_getopt_ulflags(argc, argv, "+iu:", &unset_env); @@ -93,12 +94,10 @@ extern int env_main(int argc, char** argv) } if (*argv) { - int er; - execvp(*argv, argv); - er = errno; - bb_perror_msg("%s", *argv); /* Avoid multibyte problems. */ - return (er == ENOENT) ? 127 : 126; /* SUSv3-mandated exit codes. */ + /* SUSv3-mandated exit codes. */ + bb_default_error_retval = (errno == ENOENT) ? 127 : 126; + bb_perror_msg_and_die("%s", *argv); } for (ep = environ; *ep; ep++) {