source: trunk/sys/dietlibc/putenv.c @ 35

Last change on this file since 35 was 1, checked in by alain, 8 years ago

First import

File size: 938 bytes
RevLine 
[1]1#include <stdlib.h>
2#include <string.h>
3#include <errno.h>
4
5int putenv(const char *string) {
6  size_t len;
7  int envc;
8  int remove=0;
9  char *tmp;
10  const char **ep;
11  char **newenv;
12  static char **origenv;
13  if (!origenv) origenv=environ;
14  if (!(tmp=strchr(string,'='))) {
15    len=strlen(string);
16    remove=1;
17  } else
18    len=tmp-string;
19  for (envc=0, ep=(const char**)environ; (ep && *ep); ++ep) {
20    if (*string == **ep &&
21        !memcmp(string,*ep,len) &&
22        (*ep)[len]=='=') {
23      if (remove) {
24        for (; ep[1]; ++ep) ep[0]=ep[1];
25        ep[0]=0;
26        return 0;
27      }
28      *ep=string;
29      return 0;
30    }
31    ++envc;
32  }
33  if (tmp) {
34    newenv = (char**) realloc(environ==origenv?0:environ,
35                              (envc+2)*sizeof(char*));
36    if (!newenv) return -1;
37    if (envc && (environ==origenv)) {
38      memcpy(newenv,origenv,envc*sizeof(char*));
39    }
40    newenv[envc]=(char*)string;
41    newenv[envc+1]=0;
42    environ=newenv;
43  }
44  return 0;
45}
Note: See TracBrowser for help on using the repository browser.