diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-06 02:55:41 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-06 02:55:41 +0000 |
commit | e013475830b2399e31f5e17758dd6674b6b60058 (patch) | |
tree | ad53b26765c6f24e4994402c3a0be899f16219e0 /coreutils/printenv.c | |
parent | 84d71f33f5f0201e15bb07d523cef711cd8ef44f (diff) | |
download | busybox-w32-e013475830b2399e31f5e17758dd6674b6b60058.tar.gz busybox-w32-e013475830b2399e31f5e17758dd6674b6b60058.tar.bz2 busybox-w32-e013475830b2399e31f5e17758dd6674b6b60058.zip |
env: micro-optimization
printenv: fix "printenv VAR1 VAR2" bug (wasn't printing VAR2)
(spotted by kalyanatejaswi balabhadrapatruni <kalyanatejaswi@yahoo.co.in>)
env_main 267 260 -7
printenv_main 147 75 -72
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-79) Total: -79 bytes
text data bss dec hex filename
770336 1096 11228 782660 bf144 busybox_old
770256 1096 11228 782580 bf0f4 busybox_unstripped
Diffstat (limited to 'coreutils/printenv.c')
-rw-r--r-- | coreutils/printenv.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/coreutils/printenv.c b/coreutils/printenv.c index 2531d5a23..19fa832c8 100644 --- a/coreutils/printenv.c +++ b/coreutils/printenv.c | |||
@@ -14,25 +14,20 @@ extern char **environ; | |||
14 | int printenv_main(int argc, char **argv); | 14 | int printenv_main(int argc, char **argv); |
15 | int printenv_main(int argc, char **argv) | 15 | int printenv_main(int argc, char **argv) |
16 | { | 16 | { |
17 | int e = 0; | ||
18 | |||
19 | /* no variables specified, show whole env */ | 17 | /* no variables specified, show whole env */ |
20 | if (argc == 1) | 18 | if (argc == 1) { |
19 | int e = 0; | ||
21 | while (environ[e]) | 20 | while (environ[e]) |
22 | puts(environ[e++]); | 21 | puts(environ[e++]); |
23 | 22 | } else { | |
24 | /* search for specified variables and print them out if found */ | 23 | /* search for specified variables and print them out if found */ |
25 | else { | ||
26 | int i; | ||
27 | size_t l; | ||
28 | char *arg, *env; | 24 | char *arg, *env; |
29 | 25 | ||
30 | for (i=1; (arg = argv[i]); ++i) | 26 | while ((arg = *++argv) != NULL) { |
31 | for (; (env = environ[e]); ++e) { | 27 | env = getenv(arg); |
32 | l = strlen(arg); | 28 | if (env) |
33 | if (!strncmp(env, arg, l) && env[l] == '=') | 29 | puts(env); |
34 | puts(env + l + 1); | 30 | } |
35 | } | ||
36 | } | 31 | } |
37 | 32 | ||
38 | fflush_stdout_and_exit(0); | 33 | fflush_stdout_and_exit(0); |