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) {
cleanenv[0] = NULL;
environ = cleanenv;
} else if (opt & 2) {
} else {
while (unset_env) {
unsetenv(unset_env->data);
unset_env = unset_env->link;

View File

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