diff options
-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 | /* |