#define _POSIX_C_SOURCE 200809L #include #include #include #include /* Public domain by Nathan Wagner */ extern char **environ; static void printenv() { char **env; for (env = environ; *env; env++) { printf("%s\n", *env); } } static void clearenv() { char var[1024]; /* TODO how long can the name be ? */ char *s; int i; while (*environ) { i = 0; s = *environ; while (*s && *s != '=') { var[i++] = *s++; } var[i] = 0; unsetenv(var); } } int main(int ac, char *av[]) { int arg; arg = 1; if (arg < ac && !strcmp(av[arg], "-i")) { clearenv(); arg++; } while (arg < ac) { char *eq; eq = strchr(av[arg], '='); if (eq) { *eq = 0; setenv(av[arg], eq+1, 1); *eq = '='; } else { break; } arg++; } if (arg >= ac) { printenv(); return 0; } execvp(av[arg], &av[arg]); return 0; }