diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-07-09 00:39:55 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-07-09 00:39:55 +0000 |
commit | e0da57358cc778436a5e5af1a2523611eb64f46e (patch) | |
tree | 3a4b68a3559079e71bd877d658185e9c9e749a6e /IkiWiki/Wrapper.pm | |
parent | 5a809bdd98723ebc650398010dce57a29d25b6cd (diff) | |
download | ikiwiki-e0da57358cc778436a5e5af1a2523611eb64f46e.tar ikiwiki-e0da57358cc778436a5e5af1a2523611eb64f46e.tar.gz |
get confused. So it's best for ikiwiki to follow the compatability
* Support building on systems that lack asprintf.
* mercurial getctime is currently broken, apparently by some change in
mercurial version 0.9.4. Turn the failing test case into a TODO test case.
Diffstat (limited to 'IkiWiki/Wrapper.pm')
-rw-r--r-- | IkiWiki/Wrapper.pm | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index 9415d4a17..558cdb1cc 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -33,7 +33,7 @@ sub gen_wrapper () { #{{{ foreach my $var (@envsave) { $envsave.=<<"EOF" if ((s=getenv("$var"))) - asprintf(&newenviron[i++], "%s=%s", "$var", s); + addenv("$var", s); EOF } if ($config{rcs} eq "svn" && $config{notify}) { @@ -41,15 +41,15 @@ EOF # $2 in REV in the environment. $envsave.=<<"EOF" if (argc == 3) - asprintf(&newenviron[i++], "REV=%s", argv[2]); + addenv("REV", argv[2]); else if ((s=getenv("REV"))) - asprintf(&newenviron[i++], "%s=%s", "REV", s); + addenv("REV", s); EOF } if ($config{rcs} eq "tla" && $config{notify}) { $envsave.=<<"EOF" if ((s=getenv("ARCH_VERSION"))) - asprintf(&newenviron[i++], "%s=%s", "ARCH_VERSION", s); + addenv("ARCH_VERSION", s); EOF } @@ -64,7 +64,6 @@ EOF open(OUT, ">$wrapper.c") || error(sprintf(gettext("failed to write %s: %s"), "$wrapper.c", $!));; print OUT <<"EOF"; /* A wrapper for ikiwiki, can be safely made suid. */ -#define _GNU_SOURCE #include <stdio.h> #include <sys/types.h> #include <unistd.h> @@ -72,12 +71,20 @@ EOF #include <string.h> extern char **environ; +char *newenviron[$#envsave+5]; +int i=0; + +addenv(char *var, char *val) { + char *s=malloc(strlen(var)+1+strlen(val)+1); + if (!s) + perror("malloc"); + sprintf(s, "%s=%s", var, val); + newenviron[i++]=s; +} int main (int argc, char **argv) { /* Sanitize environment. */ char *s; - char *newenviron[$#envsave+5]; - int i=0; $envsave newenviron[i++]="HOME=$ENV{HOME}"; newenviron[i++]="WRAPPED_OPTIONS=$configstring"; @@ -90,7 +97,7 @@ $envsave } execl("$this", "$this", NULL); - perror("failed to run $this"); + perror("exec $this"); exit(1); } EOF |