/* | |
* unsetenv.c | |
*/ | |
#include <errno.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include "env.h" | |
int unsetenv(const char *name) | |
{ | |
size_t len; | |
char **p, *q; | |
const char *z; | |
if (!name || !name[0]) { | |
errno = EINVAL; | |
return -1; | |
} | |
len = 0; | |
for (z = name; *z; z++) { | |
len++; | |
if (*z == '=') { | |
errno = EINVAL; | |
return -1; | |
} | |
} | |
if (!environ) | |
return 0; | |
for (p = environ; (q = *p); p++) { | |
if (!strncmp(name, q, len) && q[len] == '=') | |
break; | |
} | |
for (; (q = *p); p++) { | |
p[0] = p[1]; | |
} | |
return 0; | |
} |