aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Kraai <kraai@debian.org>2001-05-11 14:26:29 +0000
committerMatt Kraai <kraai@debian.org>2001-05-11 14:26:29 +0000
commit5b44f48afc2b5b8153fcfc44bae289281a0bef5b (patch)
tree56d0765474951f9278ae48fc054f9c34af8887ab
parentf3e79ba6e3b3bfa380241205829d0a78570c9af3 (diff)
downloadbusybox-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.c20
-rw-r--r--env.c20
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/*
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)
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/*