From: Matt Kraai Date: Fri, 11 May 2001 14:26:29 +0000 (-0000) Subject: Fix handling of '-' option and way that variables are added to the X-Git-Tag: 0_52~207 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5b44f48afc2b5b8153fcfc44bae289281a0bef5b;p=oweals%2Fbusybox.git Fix handling of '-' option and way that variables are added to the environment from Jonas Holmberg . Fix handling of command options by adding + to getopt string. --- diff --git a/coreutils/env.c b/coreutils/env.c index 56577b611..aca7c3ae2 100644 --- a/coreutils/env.c +++ b/coreutils/env.c @@ -35,14 +35,13 @@ extern int env_main(int argc, char** argv) { char **ep, *p; char *cleanenv[1]; + int ignore_environment = 0; int ch; - while ((ch = getopt(argc, argv, "-iu:")) != -1) + while ((ch = getopt(argc, argv, "+iu:")) != -1) { switch(ch) { - case '-': case 'i': - environ = cleanenv; - cleanenv[0] = NULL; + ignore_environment = 1; break; case 'u': unsetenv(optarg); @@ -50,15 +49,24 @@ extern int env_main(int argc, char** argv) default: show_usage(); } + } + if (optind != argc && !strcmp(argv[optind], "-")) { + ignore_environment = 1; + argv++; + } + if (ignore_environment) { + environ = cleanenv; + cleanenv[0] = NULL; + } for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) - setenv(*argv, ++p, 1); + putenv(*argv); if (*argv) { execvp(*argv, argv); perror_msg_and_die("%s", *argv); } for (ep = environ; *ep; ep++) printf("%s\n", *ep); - exit(EXIT_SUCCESS); + return 0; } /* diff --git a/env.c b/env.c index 56577b611..aca7c3ae2 100644 --- a/env.c +++ b/env.c @@ -35,14 +35,13 @@ extern int env_main(int argc, char** argv) { char **ep, *p; char *cleanenv[1]; + int ignore_environment = 0; int ch; - while ((ch = getopt(argc, argv, "-iu:")) != -1) + while ((ch = getopt(argc, argv, "+iu:")) != -1) { switch(ch) { - case '-': case 'i': - environ = cleanenv; - cleanenv[0] = NULL; + ignore_environment = 1; break; case 'u': unsetenv(optarg); @@ -50,15 +49,24 @@ extern int env_main(int argc, char** argv) default: show_usage(); } + } + if (optind != argc && !strcmp(argv[optind], "-")) { + ignore_environment = 1; + argv++; + } + if (ignore_environment) { + environ = cleanenv; + cleanenv[0] = NULL; + } for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) - setenv(*argv, ++p, 1); + putenv(*argv); if (*argv) { execvp(*argv, argv); perror_msg_and_die("%s", *argv); } for (ep = environ; *ep; ep++) printf("%s\n", *ep); - exit(EXIT_SUCCESS); + return 0; } /*