X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/224c70764cab4e0e39a26aaf3ad3016552f62f55..fbd86d4cc20b02a10edcca92fb7ae0a143e63cc4:/stdlib/FreeBSD/setenv.c.patch diff --git a/stdlib/FreeBSD/setenv.c.patch b/stdlib/FreeBSD/setenv.c.patch index 64a5a94..bbdda18 100644 --- a/stdlib/FreeBSD/setenv.c.patch +++ b/stdlib/FreeBSD/setenv.c.patch @@ -1,6 +1,8 @@ ---- setenv.c.orig 2006-12-12 18:14:46.000000000 -0800 -+++ setenv.c 2006-12-12 18:22:12.000000000 -0800 -@@ -40,32 +40,60 @@ +Index: setenv.c +=================================================================== +--- setenv.c (revision 41051) ++++ setenv.c (working copy) +@@ -40,32 +40,79 @@ #include #include #include @@ -25,13 +27,32 @@ - * setenv -- - * Set the value of the environmental variable "name" to be - * "value". If rewrite is set, replace any current value. ++ * Create the environment malloc zone and give it a recognizable name. + */ +-int +-setenv(name, value, rewrite) ++__private_extern__ int ++init__zone0(int should_set_errno) ++{ ++ if (__zone0) return (0); ++ ++ __zone0 = malloc_create_zone(0, 0); ++ if (!__zone0) { ++ if (should_set_errno) { ++ errno = ENOMEM; ++ } ++ return (-1); ++ } ++ malloc_set_zone_name(__zone0, "environ"); ++ return (0); ++} ++ ++/* + * The copy flag may have 3 values: + * 1 - make a copy of the name/value pair + * 0 - take the name as a user-supplied name=value string + * -1 - like 0, except we copy of the name=value string in name - */ --int --setenv(name, value, rewrite) ++ */ +__private_extern__ int +__setenv(name, value, rewrite, copy, environp, envz) const char *name; @@ -76,7 +97,7 @@ while ( (*c++ = *value++) ); return (0); } -@@ -73,48 +101,250 @@ +@@ -73,48 +120,225 @@ int cnt; char **p; @@ -157,13 +178,18 @@ +} + +/****************************************************************************/ -+/* + /* + * _allocenvstate -- SPI that creates a new state (opaque) + */ +void * +_allocenvstate(void) +{ -+ return (void *)malloc_create_zone(1000 /* unused */, 0 /* unused */); ++ malloc_zone_t *zone; ++ zone = malloc_create_zone(1000 /* unused */, 0 /* unused */); ++ if (zone) { ++ malloc_set_zone_name(zone, "environ"); ++ } ++ return (void *)zone; +} + +/* @@ -219,14 +245,7 @@ +int +_setenvp(const char *name, const char *value, int rewrite, char ***envp, void *state) +{ -+ /* insure __zone0 is set up */ -+ if (!__zone0) { -+ __zone0 = malloc_create_zone(0, 0); -+ if (!__zone0) { -+ errno = ENOMEM; -+ return (-1); -+ } -+ } ++ if (init__zone0(1)) return (-1); + return (__setenv(name, value, rewrite, 1, envp, (state ? (malloc_zone_t *)state : __zone0))); +} + @@ -239,14 +258,7 @@ +int +_unsetenvp(const char *name, char ***envp, void *state) +{ -+ /* insure __zone0 is set up */ -+ if (!__zone0) { -+ __zone0 = malloc_create_zone(0, 0); -+ if (!__zone0) { -+ errno = ENOMEM; -+ return (-1); -+ } -+ } ++ if (init__zone0(1)) return (-1); + __unsetenv(name, *envp, (state ? (malloc_zone_t *)state : __zone0)); + return 0; +} @@ -281,18 +293,12 @@ + if (*value == '=') /* no `=' in value */ + ++value; + /* insure __zone0 is set up before calling __malloc_check_env_name */ -+ if (!__zone0) { -+ __zone0 = malloc_create_zone(0, 0); -+ if (!__zone0) { -+ errno = ENOMEM; -+ return (-1); -+ } -+ } ++ if (init__zone0(1)) return (-1); + __malloc_check_env_name(name); /* see if we are changing a malloc environment variable */ + return (__setenv(name, value, rewrite, 1, _NSGetEnviron(), __zone0)); +} + - /* ++/* * unsetenv(name) -- * Delete environmental variable "name". */ @@ -324,23 +330,13 @@ + return (-1); + } + /* insure __zone0 is set up before calling __malloc_check_env_name */ -+ if (!__zone0) { -+ __zone0 = malloc_create_zone(0, 0); -+ if (!__zone0) { -+ errno = ENOMEM; -+ return (-1); -+ } -+ } ++ if (init__zone0(1)) return (-1); +#else /* !__DARWIN_UNIX03 */ + /* no null ptr or empty str */ + if(name == NULL || *name == 0) + return; + /* insure __zone0 is set up before calling __malloc_check_env_name */ -+ if (!__zone0) { -+ __zone0 = malloc_create_zone(0, 0); -+ if (!__zone0) -+ return; -+ } ++ if (init__zone0(0)) return; +#endif /* __DARWIN_UNIX03 */ + __malloc_check_env_name(name); /* see if we are changing a malloc environment variable */ + __unsetenv(name, *_NSGetEnviron(), __zone0);