diff options
author | Matt Kraai <kraai@debian.org> | 2001-05-11 14:26:29 +0000 |
---|---|---|
committer | Matt Kraai <kraai@debian.org> | 2001-05-11 14:26:29 +0000 |
commit | 5b44f48afc2b5b8153fcfc44bae289281a0bef5b (patch) | |
tree | 56d0765474951f9278ae48fc054f9c34af8887ab | |
parent | f3e79ba6e3b3bfa380241205829d0a78570c9af3 (diff) | |
download | busybox-w32-5b44f48afc2b5b8153fcfc44bae289281a0bef5b.tar.gz busybox-w32-5b44f48afc2b5b8153fcfc44bae289281a0bef5b.tar.bz2 busybox-w32-5b44f48afc2b5b8153fcfc44bae289281a0bef5b.zip |
Fix handling of '-' option and way that variables are added to the
environment from Jonas Holmberg <jonas.holmberg@axis.com>. Fix
handling of command options by adding + to getopt string.
-rw-r--r-- | coreutils/env.c | 20 | ||||
-rw-r--r-- | env.c | 20 |
2 files changed, 28 insertions, 12 deletions
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) | |||
35 | { | 35 | { |
36 | char **ep, *p; | 36 | char **ep, *p; |
37 | char *cleanenv[1]; | 37 | char *cleanenv[1]; |
38 | int ignore_environment = 0; | ||
38 | int ch; | 39 | int ch; |
39 | 40 | ||
40 | while ((ch = getopt(argc, argv, "-iu:")) != -1) | 41 | while ((ch = getopt(argc, argv, "+iu:")) != -1) { |
41 | switch(ch) { | 42 | switch(ch) { |
42 | case '-': | ||
43 | case 'i': | 43 | case 'i': |
44 | environ = cleanenv; | 44 | ignore_environment = 1; |
45 | cleanenv[0] = NULL; | ||
46 | break; | 45 | break; |
47 | case 'u': | 46 | case 'u': |
48 | unsetenv(optarg); | 47 | unsetenv(optarg); |
@@ -50,15 +49,24 @@ extern int env_main(int argc, char** argv) | |||
50 | default: | 49 | default: |
51 | show_usage(); | 50 | show_usage(); |
52 | } | 51 | } |
52 | } | ||
53 | if (optind != argc && !strcmp(argv[optind], "-")) { | ||
54 | ignore_environment = 1; | ||
55 | argv++; | ||
56 | } | ||
57 | if (ignore_environment) { | ||
58 | environ = cleanenv; | ||
59 | cleanenv[0] = NULL; | ||
60 | } | ||
53 | for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) | 61 | for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) |
54 | setenv(*argv, ++p, 1); | 62 | putenv(*argv); |
55 | if (*argv) { | 63 | if (*argv) { |
56 | execvp(*argv, argv); | 64 | execvp(*argv, argv); |
57 | perror_msg_and_die("%s", *argv); | 65 | perror_msg_and_die("%s", *argv); |
58 | } | 66 | } |
59 | for (ep = environ; *ep; ep++) | 67 | for (ep = environ; *ep; ep++) |
60 | printf("%s\n", *ep); | 68 | printf("%s\n", *ep); |
61 | exit(EXIT_SUCCESS); | 69 | return 0; |
62 | } | 70 | } |
63 | 71 | ||
64 | /* | 72 | /* |
@@ -35,14 +35,13 @@ extern int env_main(int argc, char** argv) | |||
35 | { | 35 | { |
36 | char **ep, *p; | 36 | char **ep, *p; |
37 | char *cleanenv[1]; | 37 | char *cleanenv[1]; |
38 | int ignore_environment = 0; | ||
38 | int ch; | 39 | int ch; |
39 | 40 | ||
40 | while ((ch = getopt(argc, argv, "-iu:")) != -1) | 41 | while ((ch = getopt(argc, argv, "+iu:")) != -1) { |
41 | switch(ch) { | 42 | switch(ch) { |
42 | case '-': | ||
43 | case 'i': | 43 | case 'i': |
44 | environ = cleanenv; | 44 | ignore_environment = 1; |
45 | cleanenv[0] = NULL; | ||
46 | break; | 45 | break; |
47 | case 'u': | 46 | case 'u': |
48 | unsetenv(optarg); | 47 | unsetenv(optarg); |
@@ -50,15 +49,24 @@ extern int env_main(int argc, char** argv) | |||
50 | default: | 49 | default: |
51 | show_usage(); | 50 | show_usage(); |
52 | } | 51 | } |
52 | } | ||
53 | if (optind != argc && !strcmp(argv[optind], "-")) { | ||
54 | ignore_environment = 1; | ||
55 | argv++; | ||
56 | } | ||
57 | if (ignore_environment) { | ||
58 | environ = cleanenv; | ||
59 | cleanenv[0] = NULL; | ||
60 | } | ||
53 | for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) | 61 | for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) |
54 | setenv(*argv, ++p, 1); | 62 | putenv(*argv); |
55 | if (*argv) { | 63 | if (*argv) { |
56 | execvp(*argv, argv); | 64 | execvp(*argv, argv); |
57 | perror_msg_and_die("%s", *argv); | 65 | perror_msg_and_die("%s", *argv); |
58 | } | 66 | } |
59 | for (ep = environ; *ep; ep++) | 67 | for (ep = environ; *ep; ep++) |
60 | printf("%s\n", *ep); | 68 | printf("%s\n", *ep); |
61 | exit(EXIT_SUCCESS); | 69 | return 0; |
62 | } | 70 | } |
63 | 71 | ||
64 | /* | 72 | /* |