github.com/afumu/libc@v0.0.6/musl/src/env/unsetenv.c (about)

     1  #include <stdlib.h>
     2  #include <string.h>
     3  #include <errno.h>
     4  #include <unistd.h>
     5  
     6  static void dummy(char *old, char *new) {}
     7  weak_alias(dummy, __env_rm_add);
     8  
     9  int unsetenv(const char *name)
    10  {
    11  	size_t l = __strchrnul(name, '=') - name;
    12  	if (!l || name[l]) {
    13  		errno = EINVAL;
    14  		return -1;
    15  	}
    16  	if (__environ) {
    17  		char **e = __environ, **eo = e;
    18  		for (; *e; e++)
    19  			//TODO if (!strncmp(name, *e, l) && l[*e] == '=')
    20  			if (!strncmp(name, *e, l) && (*e)[l] == '=')
    21  				__env_rm_add(*e, 0);
    22  			else if (eo != e)
    23  				*eo++ = *e;
    24  			else
    25  				eo++;
    26  		if (eo != e) *eo = 0;
    27  	}
    28  	return 0;
    29  }