(putenv): bug fixes from <hin@stacken.kth.se>

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8070 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
2000-03-26 23:08:24 +00:00
parent c244cd2e52
commit 32996fd31f

View File

@@ -47,12 +47,17 @@ extern char **environ;
* Makes the value of the environment variable name equal to * Makes the value of the environment variable name equal to
* value by altering an existing variable or creating a new one. * value by altering an existing variable or creating a new one.
*/ */
int putenv(const char *string)
int
putenv(const char *string)
{ {
int i; int i;
const char *eq = (const char *)strchr(string, '=');
int len; int len;
len = string - strchr(string, '=') + 1; if (eq == NULL)
return 1;
len = eq - string;
if(environ == NULL) { if(environ == NULL) {
environ = malloc(sizeof(char*)); environ = malloc(sizeof(char*));
@@ -61,16 +66,15 @@ int putenv(const char *string)
environ[0] = NULL; environ[0] = NULL;
} }
for(i = 0; environ[i]; i++) for(i = 0; environ[i] != NULL; i++)
if(strncmp(string, environ[i], len)){ if(strncmp(string, environ[i], len) == 0) {
environ[len] = string; environ[i] = string;
return 0; return 0;
} }
environ = realloc(environ, sizeof(char*) * (i + 1)); environ = realloc(environ, sizeof(char*) * (i + 2));
if(environ == NULL) if(environ == NULL)
return 1; return 1;
environ[i] = string; environ[i] = string;
environ[i+1] = NULL; environ[i+1] = NULL;
return 0; return 0;
} }