]> pd.if.org Git - pdutils/blob - posix/env/env.c
implemented pwd
[pdutils] / posix / env / env.c
1 #define _POSIX_C_SOURCE 200809L
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <string.h>
5 #include <unistd.h>
6
7 /* Public domain by Nathan Wagner */
8
9 extern char **environ;
10
11 static void printenv() {
12         char **env;
13         for (env = environ; *env; env++) {
14                 printf("%s\n", *env);
15         }
16 }
17
18 static void clearenv() {
19         char var[1024]; /* TODO how long can the name be ? */
20         char *s;
21         int i;
22
23         while (*environ) {
24                 i = 0;
25                 s = *environ;
26                 while (*s && *s != '=') {
27                         var[i++] = *s++;
28                 }
29                 var[i] = 0;
30                 unsetenv(var);
31         }
32 }
33
34 int main(int ac, char *av[]) {
35         int arg;
36         arg = 1;
37         if (arg < ac && !strcmp(av[arg], "-i")) {
38                 clearenv();
39                 arg++;
40         }
41         while (arg < ac) {
42                 char *eq;
43                 eq = strchr(av[arg], '=');
44                 if (eq) {
45                         *eq = 0;
46                         setenv(av[arg], eq+1, 1);
47                         *eq = '=';
48                 } else {
49                         break;
50                 }
51                 arg++;
52         }
53
54         if (arg >= ac) {
55                 printenv();
56                 return 0;
57         }
58
59         execvp(av[arg], &av[arg]);
60         return 0;
61 }