summaryrefslogtreecommitdiff
path: root/IkiWiki/Wrapper.pm
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/Wrapper.pm')
-rw-r--r--IkiWiki/Wrapper.pm17
1 files changed, 14 insertions, 3 deletions
diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index 5427a5c80..73f0896e8 100644
--- a/IkiWiki/Wrapper.pm
+++ b/IkiWiki/Wrapper.pm
@@ -76,8 +76,8 @@ EOF
{
int fd=open("$config{wikistatedir}/cgilock", O_CREAT | O_RDWR, 0666);
if (fd != -1 && flock(fd, LOCK_EX) == 0) {
- char *fd_s;
- asprintf(&fd_s, "%i", fd);
+ char *fd_s=malloc(8);
+ sprintf(fd_s, "%i", fd);
setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
}
}
@@ -105,7 +105,7 @@ extern char **environ;
char *newenviron[$#envsave+6];
int i=0;
-addenv(char *var, char *val) {
+void addenv(char *var, char *val) {
char *s=malloc(strlen(var)+1+strlen(val)+1);
if (!s)
perror("malloc");
@@ -121,8 +121,19 @@ $check_commit_hook
$envsave
newenviron[i++]="HOME=$ENV{HOME}";
newenviron[i++]="WRAPPED_OPTIONS=$configstring";
+
+#ifdef __TINYC__
+ /* old tcc versions do not support modifying environ directly */
+ 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) {