summaryrefslogtreecommitdiffstats
path: root/fakechroot-svn-no-dup-envs.patch
diff options
context:
space:
mode:
authorrjones <rjones>2009-03-23 15:57:23 +0000
committerrjones <rjones>2009-03-23 15:57:23 +0000
commita1687222cb9f33b2055d4f06a4583315edec9acc (patch)
tree66735e5c87bb4b7e0a03a633e270e94cde98c33e /fakechroot-svn-no-dup-envs.patch
parentb72ec392f8150426e01c38d9307baf9032111c15 (diff)
downloadfebootstrap-a1687222cb9f33b2055d4f06a4583315edec9acc.tar.gz
febootstrap-a1687222cb9f33b2055d4f06a4583315edec9acc.tar.xz
febootstrap-a1687222cb9f33b2055d4f06a4583315edec9acc.zip
Updated the fakechroot patches.
Diffstat (limited to 'fakechroot-svn-no-dup-envs.patch')
-rw-r--r--fakechroot-svn-no-dup-envs.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/fakechroot-svn-no-dup-envs.patch b/fakechroot-svn-no-dup-envs.patch
new file mode 100644
index 0000000..72b33a9
--- /dev/null
+++ b/fakechroot-svn-no-dup-envs.patch
@@ -0,0 +1,40 @@
+This patch must be applied to fakechroot SVN in order to
+stop it from passing duplicated environment variables to
+child processes. It is not necessary for fakechroot <= 2.8.
+
+Index: src/libfakechroot.c
+===================================================================
+--- src/libfakechroot.c (revision 311)
++++ src/libfakechroot.c (working copy)
+@@ -1479,7 +1479,7 @@
+ char *env;
+ char tmp[FAKECHROOT_MAXPATH], newfilename[FAKECHROOT_MAXPATH], argv0[FAKECHROOT_MAXPATH];
+ char *ptr;
+- unsigned int i, j, n;
++ unsigned int i, j, n, len;
+ size_t sizeenvp;
+ char c;
+ char *fakechroot_path, *fakechroot_ptr, fakechroot_buf[FAKECHROOT_MAXPATH];
+@@ -1519,12 +1519,19 @@
+ errno = ENOMEM;
+ return -1;
+ }
+- for (ep = envp, i = 0; *ep != NULL; ++ep, ++i) {
+- newenvp[i] = *ep;
++ for (ep = envp, i = 0; *ep != NULL; ++ep) {
++ for (j = 0; j < sizeof (envkey) / sizeof (char *); j++) {
++ len = strlen (envkey[j]);
++ if (strncmp (*ep, envkey[j], len) == 0 && (*ep)[len] == '=')
++ goto skip;
++ }
++ newenvp[i] = *ep;
++ i++;
++ skip: ;
+ }
+
+ /* Add our variables to newenvp */
+- newenvp = realloc( newenvp, ((sizeenvp + 1) * sizeof(char *) + sizeof(envkey)) );
++ newenvp = realloc( newenvp, i * sizeof(char *) + sizeof(envkey) );
+ if (newenvp == NULL) {
+ errno = ENOMEM;
+ return -1;