Bump to version 1.22.1
[platform/upstream/busybox.git] / coreutils / printenv.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * printenv implementation for busybox
4  *
5  * Copyright (C) 2005 by Erik Andersen <andersen@codepoet.org>
6  * Copyright (C) 2005 by Mike Frysinger <vapier@gentoo.org>
7  *
8  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
9  */
10
11 //usage:#define printenv_trivial_usage
12 //usage:       "[VARIABLE]..."
13 //usage:#define printenv_full_usage "\n\n"
14 //usage:       "Print environment VARIABLEs.\n"
15 //usage:       "If no VARIABLE specified, print all."
16
17 #include "libbb.h"
18
19 /* This is a NOFORK applet. Be very careful! */
20
21 int printenv_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
22 int printenv_main(int argc UNUSED_PARAM, char **argv)
23 {
24         int exit_code = EXIT_SUCCESS;
25
26         /* no variables specified, show whole env */
27         if (!argv[1]) {
28                 char **e = environ;
29
30                 /* environ can be NULL! (for example, after clearenv())
31                  * Check for that:
32                  */
33                 if (e)
34                         while (*e)
35                                 puts(*e++);
36         } else {
37                 /* search for specified variables and print them out if found */
38                 char *arg, *env;
39
40                 while ((arg = *++argv) != NULL) {
41                         env = getenv(arg);
42                         if (env)
43                                 puts(env);
44                         else
45                                 exit_code = EXIT_FAILURE;
46                 }
47         }
48
49         fflush_stdout_and_exit(exit_code);
50 }