#include #include extern char **environ; char * getenv(char *name) { char **p; int n; n = strlen(name); for(p = environ; *p != 0; p++) { if(strncmp(name, *p, n) == 0 && (*p)[n] == '=') return *p+n+1; } return 0; } static int firstalloc = 1; /* * put a string of the form "name=val" into the environment */ int putenv(char *name, char *val) { char **p, *new; int n, l; new = malloc(strlen(name)+1+strlen(val)+1); if(new == 0) return -1; strcpy(new, name); strcat(new, "="); strcat(new, val); l = strlen(name); for(p = environ; *p; p++) if(strncmp(name, *p, l) == 0 && (*p)[l] == '=') { *p = new; return 0; } /* not currently in the environment */ n = p-environ+2; if(!firstalloc) { p = realloc(environ, n*sizeof(char*)); if(p == 0) return -1; environ = p; } else { firstalloc = 0; p = malloc(n*sizeof(char*)); if(p == 0) return -1; memmove(p, environ, n*sizeof(char*)); environ = p; } environ[n-2] = new; environ[n-1] = 0; return 0; }