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