53 lines
790 B
C
53 lines
790 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
extern char **environ;
|
|
|
|
static int printvars(int len, char **names, char n_flag) {
|
|
int ret = 0;
|
|
|
|
for (int i = 0; i < len; i++) {
|
|
char *val = getenv(names[i]);
|
|
if (!val) {
|
|
ret = 1;
|
|
continue;
|
|
}
|
|
|
|
printf("%s%c", val, n_flag);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
char n_flag = '\n';
|
|
|
|
int opt;
|
|
while ((opt = getopt(argc, argv, "0")) != -1) {
|
|
switch (opt) {
|
|
case 'n':
|
|
n_flag = '\0';
|
|
break;
|
|
|
|
default:
|
|
puts("printenv [var1 var2...]\n\t-0 NUL terminated output\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
argv += optind;
|
|
argc -= optind;
|
|
|
|
if (argc == 0) {
|
|
while (*environ)
|
|
printf("%s%c", *environ++, n_flag);
|
|
}
|
|
|
|
else
|
|
return printvars(argc, argv, n_flag);
|
|
|
|
return 0;
|
|
}
|