text: #include <stdlib.h>
  #include <string.h>
  #include <errno.h>
  
  extern char **__environ;
  extern char **__env_map;
  
  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;
  }
  