10f66f451Sopenharmony_ci/* printenv.c - Print environment variables.
20f66f451Sopenharmony_ci *
30f66f451Sopenharmony_ci * Copyright 2012 Georgi Chorbadzhiyski <georgi@unixsol.org>
40f66f451Sopenharmony_ci
50f66f451Sopenharmony_ciUSE_PRINTENV(NEWTOY(printenv, "(null)0", TOYFLAG_BIN))
60f66f451Sopenharmony_ci
70f66f451Sopenharmony_ciconfig PRINTENV
80f66f451Sopenharmony_ci  bool "printenv"
90f66f451Sopenharmony_ci  default y
100f66f451Sopenharmony_ci  help
110f66f451Sopenharmony_ci    usage: printenv [-0] [env_var...]
120f66f451Sopenharmony_ci
130f66f451Sopenharmony_ci    Print environment variables.
140f66f451Sopenharmony_ci
150f66f451Sopenharmony_ci    -0	Use \0 as delimiter instead of \n
160f66f451Sopenharmony_ci*/
170f66f451Sopenharmony_ci
180f66f451Sopenharmony_ci#include "toys.h"
190f66f451Sopenharmony_ci
200f66f451Sopenharmony_civoid printenv_main(void)
210f66f451Sopenharmony_ci{
220f66f451Sopenharmony_ci  char **env, **var = toys.optargs;
230f66f451Sopenharmony_ci  char delim = '\n';
240f66f451Sopenharmony_ci
250f66f451Sopenharmony_ci  if (toys.optflags) delim = 0;
260f66f451Sopenharmony_ci
270f66f451Sopenharmony_ci  do {
280f66f451Sopenharmony_ci    int catch = 0, len = *var ? strlen(*var) : 0;
290f66f451Sopenharmony_ci
300f66f451Sopenharmony_ci    for (env = environ; *env; env++) {
310f66f451Sopenharmony_ci      char *out = *env;
320f66f451Sopenharmony_ci      if (*var) {
330f66f451Sopenharmony_ci        if (!strncmp(out, *var, len) && out[len] == '=') out += len +1;
340f66f451Sopenharmony_ci        else continue;
350f66f451Sopenharmony_ci      }
360f66f451Sopenharmony_ci      xprintf("%s%c", out, delim);
370f66f451Sopenharmony_ci      catch++;
380f66f451Sopenharmony_ci    }
390f66f451Sopenharmony_ci    if (*var && !catch) toys.exitval = 1;
400f66f451Sopenharmony_ci  } while (*var && *(++var));
410f66f451Sopenharmony_ci}
42