aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2010-03-28 18:27:23 -0400
committerJoey Hess <joey@gnu.kitenet.net>2010-03-28 18:27:23 -0400
commit0c6e467aa6931ec6bd7720ecaea5e33aeca4d1be (patch)
treec71617f6e0570f0aa66857f1da7855c780f56520
parent7e9d1932a2b90d5092315c18603cf495da28d6da (diff)
downloadikiwiki-0c6e467aa6931ec6bd7720ecaea5e33aeca4d1be.tar
ikiwiki-0c6e467aa6931ec6bd7720ecaea5e33aeca4d1be.tar.gz
use __TINYC__ define to avoid tinyc compat fixes breaking FreeBSD
To review, tcc does not really use environ, so you have to use clearenv there. But POSIX, in their wisdom, didn't standardise clearenv yet, so on FreeBSD, one still needs to manipulate environ on their own. (If you use tcc on FreeBSD, this may leave you unsatisfied.)
-rw-r--r--IkiWiki/Wrapper.pm6
-rw-r--r--doc/bugs/clearenv_not_present_at_FreeBSD_.mdwn3
2 files changed, 9 insertions, 0 deletions
diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index f175b4a0b..3f3e63ca6 100644
--- a/IkiWiki/Wrapper.pm
+++ b/IkiWiki/Wrapper.pm
@@ -101,6 +101,7 @@ EOF
#include <string.h>
#include <sys/file.h>
+extern char **environ;
char *newenviron[$#envsave+6];
int i=0;
@@ -121,12 +122,17 @@ $envsave
newenviron[i++]="HOME=$ENV{HOME}";
newenviron[i++]="WRAPPED_OPTIONS=$configstring";
+#ifdef __TINYC__
if (clearenv() != 0) {
perror("clearenv");
exit(1);
}
for (; i>0; i--)
putenv(newenviron[i-1]);
+#else
+ newenviron[i]=NULL;
+ environ=newenviron;
+#endif
if (setregid(getegid(), -1) != 0 &&
setregid(getegid(), -1) != 0) {
diff --git a/doc/bugs/clearenv_not_present_at_FreeBSD_.mdwn b/doc/bugs/clearenv_not_present_at_FreeBSD_.mdwn
index 6ad7975eb..c2355d6aa 100644
--- a/doc/bugs/clearenv_not_present_at_FreeBSD_.mdwn
+++ b/doc/bugs/clearenv_not_present_at_FreeBSD_.mdwn
@@ -1,2 +1,5 @@
When build wrapper on FreeBSD system, is error occured with clearenv reference. clearenv() das not exists at FreeBSD system, use workaround environ[0]=NULL;
P.S. new git instalation, FreeBSD 7.x
+
+> #include <stupid-standards.h> fixed with nasty ifdefs to handle tcc w/o
+> breaking everything else. ||done]] --[[Joey]]