xref: /aosp_15_r20/external/toybox/toys/other/printenv.c (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker /* printenv.c - Print environment variables.
2*cf5a6c84SAndroid Build Coastguard Worker  *
3*cf5a6c84SAndroid Build Coastguard Worker  * Copyright 2012 Georgi Chorbadzhiyski <[email protected]>
4*cf5a6c84SAndroid Build Coastguard Worker 
5*cf5a6c84SAndroid Build Coastguard Worker USE_PRINTENV(NEWTOY(printenv, "(null)0", TOYFLAG_BIN))
6*cf5a6c84SAndroid Build Coastguard Worker 
7*cf5a6c84SAndroid Build Coastguard Worker config PRINTENV
8*cf5a6c84SAndroid Build Coastguard Worker   bool "printenv"
9*cf5a6c84SAndroid Build Coastguard Worker   default y
10*cf5a6c84SAndroid Build Coastguard Worker   help
11*cf5a6c84SAndroid Build Coastguard Worker     usage: printenv [-0] [env_var...]
12*cf5a6c84SAndroid Build Coastguard Worker 
13*cf5a6c84SAndroid Build Coastguard Worker     Print environment variables.
14*cf5a6c84SAndroid Build Coastguard Worker 
15*cf5a6c84SAndroid Build Coastguard Worker     -0	Use \0 as delimiter instead of \n
16*cf5a6c84SAndroid Build Coastguard Worker */
17*cf5a6c84SAndroid Build Coastguard Worker 
18*cf5a6c84SAndroid Build Coastguard Worker #include "toys.h"
19*cf5a6c84SAndroid Build Coastguard Worker 
printenv_main(void)20*cf5a6c84SAndroid Build Coastguard Worker void printenv_main(void)
21*cf5a6c84SAndroid Build Coastguard Worker {
22*cf5a6c84SAndroid Build Coastguard Worker   char **env, **var = toys.optargs;
23*cf5a6c84SAndroid Build Coastguard Worker   char delim = '\n';
24*cf5a6c84SAndroid Build Coastguard Worker 
25*cf5a6c84SAndroid Build Coastguard Worker   if (toys.optflags) delim = 0;
26*cf5a6c84SAndroid Build Coastguard Worker 
27*cf5a6c84SAndroid Build Coastguard Worker   do {
28*cf5a6c84SAndroid Build Coastguard Worker     int catch = 0, len = *var ? strlen(*var) : 0;
29*cf5a6c84SAndroid Build Coastguard Worker 
30*cf5a6c84SAndroid Build Coastguard Worker     for (env = environ; *env; env++) {
31*cf5a6c84SAndroid Build Coastguard Worker       char *out = *env;
32*cf5a6c84SAndroid Build Coastguard Worker       if (*var) {
33*cf5a6c84SAndroid Build Coastguard Worker         if (!strncmp(out, *var, len) && out[len] == '=') out += len +1;
34*cf5a6c84SAndroid Build Coastguard Worker         else continue;
35*cf5a6c84SAndroid Build Coastguard Worker       }
36*cf5a6c84SAndroid Build Coastguard Worker       xprintf("%s%c", out, delim);
37*cf5a6c84SAndroid Build Coastguard Worker       catch++;
38*cf5a6c84SAndroid Build Coastguard Worker     }
39*cf5a6c84SAndroid Build Coastguard Worker     if (*var && !catch) toys.exitval = 1;
40*cf5a6c84SAndroid Build Coastguard Worker   } while (*var && *(++var));
41*cf5a6c84SAndroid Build Coastguard Worker }
42