blob: bd5db7073a318331847884504d5bddd2c3666e38
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 | } |
51 |