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
This commit is contained in:
Denis Vlasenko 2007-08-06 02:55:41 +00:00
parent 84d71f33f5
commit e013475830
2 changed files with 10 additions and 15 deletions

View File

@ -63,7 +63,7 @@ int env_main(int argc, char** argv)
if (opt & 1) { if (opt & 1) {
cleanenv[0] = NULL; cleanenv[0] = NULL;
environ = cleanenv; environ = cleanenv;
} else if (opt & 2) { } else {
while (unset_env) { while (unset_env) {
unsetenv(unset_env->data); unsetenv(unset_env->data);
unset_env = unset_env->link; unset_env = unset_env->link;

View File

@ -14,25 +14,20 @@ extern char **environ;
int printenv_main(int argc, char **argv); int printenv_main(int argc, char **argv);
int printenv_main(int argc, char **argv) int printenv_main(int argc, char **argv)
{ {
int e = 0;
/* no variables specified, show whole env */ /* no variables specified, show whole env */
if (argc == 1) if (argc == 1) {
int e = 0;
while (environ[e]) while (environ[e])
puts(environ[e++]); puts(environ[e++]);
} else {
/* search for specified variables and print them out if found */ /* search for specified variables and print them out if found */
else {
int i;
size_t l;
char *arg, *env; char *arg, *env;
for (i=1; (arg = argv[i]); ++i) while ((arg = *++argv) != NULL) {
for (; (env = environ[e]); ++e) { env = getenv(arg);
l = strlen(arg); if (env)
if (!strncmp(env, arg, l) && env[l] == '=') puts(env);
puts(env + l + 1); }
}
} }
fflush_stdout_and_exit(0); fflush_stdout_and_exit(0);