X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fprintenv.c;h=bd5db7073a318331847884504d5bddd2c3666e38;hb=2a17fbe88a0cc064248db4ce8939f0fbc357922d;hp=31d76d7122bd7d150fa4476db17ca94fb2e82cf8;hpb=1d42665b6b0571b9fa5d3b10fbf2dd03382f0ba2;p=oweals%2Fbusybox.git diff --git a/coreutils/printenv.c b/coreutils/printenv.c index 31d76d712..bd5db7073 100644 --- a/coreutils/printenv.c +++ b/coreutils/printenv.c @@ -5,19 +5,34 @@ * Copyright (C) 2005 by Erik Andersen * Copyright (C) 2005 by Mike Frysinger * - * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ +//usage:#define printenv_trivial_usage +//usage: "[VARIABLE]..." +//usage:#define printenv_full_usage "\n\n" +//usage: "Print environment VARIABLEs.\n" +//usage: "If no VARIABLE specified, print all." + #include "libbb.h" +/* This is a NOFORK applet. Be very careful! */ + int printenv_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int printenv_main(int argc ATTRIBUTE_UNUSED, char **argv) +int printenv_main(int argc UNUSED_PARAM, char **argv) { + int exit_code = EXIT_SUCCESS; + /* no variables specified, show whole env */ if (!argv[1]) { - int e = 0; - while (environ[e]) - puts(environ[e++]); + char **e = environ; + + /* environ can be NULL! (for example, after clearenv()) + * Check for that: + */ + if (e) + while (*e) + puts(*e++); } else { /* search for specified variables and print them out if found */ char *arg, *env; @@ -26,8 +41,10 @@ int printenv_main(int argc ATTRIBUTE_UNUSED, char **argv) env = getenv(arg); if (env) puts(env); + else + exit_code = EXIT_FAILURE; } } - fflush_stdout_and_exit(0); + fflush_stdout_and_exit(exit_code); }