| Index: fusl/src/env/putenv.c
|
| diff --git a/fusl/src/env/putenv.c b/fusl/src/env/putenv.c
|
| index 4042869b500f1866e111918f121ba3d08d962287..7f6caa4a0608aaea1de737ec9d0cc6c86b996d40 100644
|
| --- a/fusl/src/env/putenv.c
|
| +++ b/fusl/src/env/putenv.c
|
| @@ -1,57 +1,61 @@
|
| #include <stdlib.h>
|
| #include <string.h>
|
|
|
| -extern char **__environ;
|
| -char **__env_map;
|
| +extern char** __environ;
|
| +char** __env_map;
|
|
|
| -int __putenv(char *s, int a)
|
| -{
|
| - int i=0, j=0;
|
| - char *z = strchr(s, '=');
|
| - char **newenv = 0;
|
| - char **newmap = 0;
|
| - static char **oldenv;
|
| +int __putenv(char* s, int a) {
|
| + int i = 0, j = 0;
|
| + char* z = strchr(s, '=');
|
| + char** newenv = 0;
|
| + char** newmap = 0;
|
| + static char** oldenv;
|
|
|
| - if (!z) return unsetenv(s);
|
| - if (z==s) return -1;
|
| - for (; __environ[i] && memcmp(s, __environ[i], z-s+1); i++);
|
| - if (a) {
|
| - if (!__env_map) {
|
| - __env_map = calloc(2, sizeof(char *));
|
| - if (__env_map) __env_map[0] = s;
|
| - } else {
|
| - for (; __env_map[j] && __env_map[j] != __environ[i]; j++);
|
| - if (!__env_map[j]) {
|
| - newmap = realloc(__env_map, sizeof(char *)*(j+2));
|
| - if (newmap) {
|
| - __env_map = newmap;
|
| - __env_map[j] = s;
|
| - __env_map[j+1] = NULL;
|
| - }
|
| - } else {
|
| - free(__env_map[j]);
|
| - }
|
| - }
|
| - }
|
| - if (!__environ[i]) {
|
| - newenv = malloc(sizeof(char *)*(i+2));
|
| - if (!newenv) {
|
| - if (a && __env_map) __env_map[j] = 0;
|
| - return -1;
|
| - }
|
| - memcpy(newenv, __environ, sizeof(char *)*i);
|
| - newenv[i] = s;
|
| - newenv[i+1] = 0;
|
| - __environ = newenv;
|
| - free(oldenv);
|
| - oldenv = __environ;
|
| - }
|
| + if (!z)
|
| + return unsetenv(s);
|
| + if (z == s)
|
| + return -1;
|
| + for (; __environ[i] && memcmp(s, __environ[i], z - s + 1); i++)
|
| + ;
|
| + if (a) {
|
| + if (!__env_map) {
|
| + __env_map = calloc(2, sizeof(char*));
|
| + if (__env_map)
|
| + __env_map[0] = s;
|
| + } else {
|
| + for (; __env_map[j] && __env_map[j] != __environ[i]; j++)
|
| + ;
|
| + if (!__env_map[j]) {
|
| + newmap = realloc(__env_map, sizeof(char*) * (j + 2));
|
| + if (newmap) {
|
| + __env_map = newmap;
|
| + __env_map[j] = s;
|
| + __env_map[j + 1] = NULL;
|
| + }
|
| + } else {
|
| + free(__env_map[j]);
|
| + }
|
| + }
|
| + }
|
| + if (!__environ[i]) {
|
| + newenv = malloc(sizeof(char*) * (i + 2));
|
| + if (!newenv) {
|
| + if (a && __env_map)
|
| + __env_map[j] = 0;
|
| + return -1;
|
| + }
|
| + memcpy(newenv, __environ, sizeof(char*) * i);
|
| + newenv[i] = s;
|
| + newenv[i + 1] = 0;
|
| + __environ = newenv;
|
| + free(oldenv);
|
| + oldenv = __environ;
|
| + }
|
|
|
| - __environ[i] = s;
|
| - return 0;
|
| + __environ[i] = s;
|
| + return 0;
|
| }
|
|
|
| -int putenv(char *s)
|
| -{
|
| - return __putenv(s, 0);
|
| +int putenv(char* s) {
|
| + return __putenv(s, 0);
|
| }
|
|
|