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