blob: 4d78fe1f218ebff47e75dcb1de9b6bf5beffa502 [file] [log] [blame]
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include "env_impl.h"
#include "libc.h"
int unsetenv(const char* name) {
int i, j;
size_t l = strlen(name);
if (!*name || strchr(name, '=')) {
errno = EINVAL;
return -1;
}
again:
for (i = 0; __environ[i] && (memcmp(name, __environ[i], l) || __environ[i][l] != '='); i++)
;
if (__environ[i]) {
if (__env_map) {
for (j = 0; __env_map[j] && __env_map[j] != __environ[i]; j++)
;
free(__env_map[j]);
for (; __env_map[j]; j++)
__env_map[j] = __env_map[j + 1];
}
for (; __environ[i]; i++)
__environ[i] = __environ[i + 1];
goto again;
}
return 0;
}