consistently use the internal name __environ for environ
authorRich Felker <dalias@aerifal.cx>
Sun, 17 Feb 2013 19:24:39 +0000 (14:24 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 17 Feb 2013 19:24:39 +0000 (14:24 -0500)
patch by Jens Gustedt.
previously, the intended policy was to use __environ in code that must
conform to the ISO C namespace requirements, and environ elsewhere.
this policy was not followed in practice anyway, making things
confusing. on top of that, Jens reported that certain combinations of
link-time optimization options were breaking with the inconsistent
references; this seems to be a compiler or linker bug, but having it
go away is a nice side effect of the changes made here.

src/internal/libc.h
src/process/execvp.c
src/process/system.c

index 5089114..c9416f0 100644 (file)
@@ -57,7 +57,6 @@ void __synccall(void (*)(void *), void *);
 int __setxid(int, int, int, int);
 
 extern char **__environ;
 int __setxid(int, int, int, int);
 
 extern char **__environ;
-#define environ __environ
 
 #undef weak_alias
 #define weak_alias(old, new) \
 
 #undef weak_alias
 #define weak_alias(old, new) \
index 682680d..0a33e42 100644 (file)
@@ -4,7 +4,7 @@
 #include <errno.h>
 #include <limits.h>
 
 #include <errno.h>
 #include <limits.h>
 
-extern char **environ;
+extern char **__environ;
 
 int __execvpe(const char *file, char *const argv[], char *const envp[])
 {
 
 int __execvpe(const char *file, char *const argv[], char *const envp[])
 {
@@ -45,5 +45,5 @@ int __execvpe(const char *file, char *const argv[], char *const envp[])
 
 int execvp(const char *file, char *const argv[])
 {
 
 int execvp(const char *file, char *const argv[])
 {
-       return __execvpe(file, argv, environ);
+       return __execvpe(file, argv, __environ);
 }
 }
index 0aa34cd..4232bef 100644 (file)
@@ -13,7 +13,7 @@ static void dummy_0()
 weak_alias(dummy_0, __acquire_ptc);
 weak_alias(dummy_0, __release_ptc);
 
 weak_alias(dummy_0, __acquire_ptc);
 weak_alias(dummy_0, __release_ptc);
 
-extern char **environ;
+extern char **__environ;
 
 int system(const char *cmd)
 {
 
 int system(const char *cmd)
 {
@@ -40,7 +40,7 @@ int system(const char *cmd)
        posix_spawnattr_setsigdefault(&attr, &reset);
        posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGDEF|POSIX_SPAWN_SETSIGMASK);
        ret = posix_spawn(&pid, "/bin/sh", 0, &attr,
        posix_spawnattr_setsigdefault(&attr, &reset);
        posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGDEF|POSIX_SPAWN_SETSIGMASK);
        ret = posix_spawn(&pid, "/bin/sh", 0, &attr,
-               (char *[]){"sh", "-c", (char *)cmd, 0}, environ);
+               (char *[]){"sh", "-c", (char *)cmd, 0}, __environ);
        posix_spawnattr_destroy(&attr);
 
        if (!ret) while (waitpid(pid, &status, 0)<0 && errno == EINTR);
        posix_spawnattr_destroy(&attr);
 
        if (!ret) while (waitpid(pid, &status, 0)<0 && errno == EINTR);