| /* |
| * 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; |
| } |