aboutsummaryrefslogtreecommitdiff
path: root/contrib/put_env.h
blob: 0d817b32af67de173a3849d8bf0b10ffedc93013 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int put_env(const char *string) {
  unsigned int len, envc, remove=0;
  char **ep;
 
  len=str_chr(string,'=');
  if (string[len]==0) remove=1;
  for (envc=0, ep=environ; *ep; ++ep) {
    if (!byte_diff(string, len, *ep) && (*ep)[len]=='=') {
      if (remove) {
	for (; ep[1]; ++ep) ep[0]=ep[1];
	ep[0]=0;
	++env_free;
	return 0;
      }
      *ep=(char *)string;
      return 0;
    }
    ++envc;
  }
  if (remove==0) {
    if (env_free==0) return -1;
    environ[envc++]=(char*)string;
    environ[envc]=0;
    --env_free;
  }
  return 0;
}