Updated the fakechroot patches.
authorrjones <rjones>
Mon, 23 Mar 2009 15:57:23 +0000 (15:57 +0000)
committerrjones <rjones>
Mon, 23 Mar 2009 15:57:23 +0000 (15:57 +0000)
fakechroot-2.8-relchroot.patch
fakechroot-svn-no-dup-envs.patch [new file with mode: 0644]

index 9ba4d80..beddabe 100644 (file)
@@ -1,9 +1,11 @@
-This patch must be applied to fakeroot 2.8 in order to
+This patch must be applied to fakeroot 2.8 or SVN in order to
 enable correct handling of relative chroots, for rpm and yum.
 
 enable correct handling of relative chroots, for rpm and yum.
 
---- fakechroot-2.8.orig/src/libfakechroot.c    2009-03-18 11:39:33.000000000 +0000
-+++ fakechroot-2.8.rpm/src/libfakechroot.c     2009-03-18 12:43:51.000000000 +0000
-@@ -1110,7 +1110,7 @@ int chroot (const char *path)
+Index: src/libfakechroot.c
+===================================================================
+--- src/libfakechroot.c        (revision 311)
++++ src/libfakechroot.c        (working copy)
+@@ -1147,7 +1147,7 @@
  {
      char *ptr, *ld_library_path, *tmp, *fakechroot_path;
      int status, len;
  {
      char *ptr, *ld_library_path, *tmp, *fakechroot_path;
      int status, len;
@@ -12,7 +14,18 @@ enable correct handling of relative chroots, for rpm and yum.
  #if !defined(HAVE_SETENV)
      char *envbuf;
  #endif
  #if !defined(HAVE_SETENV)
      char *envbuf;
  #endif
-@@ -1134,23 +1134,21 @@ int chroot (const char *path)
+@@ -1162,7 +1162,9 @@
+         return -1;
+     }
+     if (*path != '/') {
+-        if (getcwd(cwd, FAKECHROOT_MAXPATH) == NULL) {
++        if (next_getcwd == NULL) fakechroot_init();
++
++        if (next_getcwd(cwd, FAKECHROOT_MAXPATH) == NULL) {
+             errno = ENAMETOOLONG;
+             return -1;
+         }
+@@ -1171,24 +1173,22 @@
              return -1;
          }
          if (strcmp(cwd, "/") == 0) {
              return -1;
          }
          if (strcmp(cwd, "/") == 0) {
@@ -27,15 +40,12 @@ enable correct handling of relative chroots, for rpm and yum.
      else {
 -        snprintf(full_path, FAKECHROOT_MAXPATH, "%s", path);
 -    }
      else {
 -        snprintf(full_path, FAKECHROOT_MAXPATH, "%s", path);
 -    }
--
--    fakechroot_path = getenv("FAKECHROOT_BASE");
 +      fakechroot_path = getenv("FAKECHROOT_BASE");
  
 +      fakechroot_path = getenv("FAKECHROOT_BASE");
  
+-    fakechroot_path = getenv("FAKECHROOT_BASE");
+-
 -    if (fakechroot_path != NULL) {
 -        snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, full_path);
 -    if (fakechroot_path != NULL) {
 -        snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, full_path);
--    }
--    else {
--        snprintf(dir, FAKECHROOT_MAXPATH, "%s", full_path);
 +      if (fakechroot_path != NULL) {
 +          snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, path);
 +      }
 +      if (fakechroot_path != NULL) {
 +          snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, path);
 +      }
@@ -43,5 +53,9 @@ enable correct handling of relative chroots, for rpm and yum.
 +          snprintf(dir, FAKECHROOT_MAXPATH, "%s", path);
 +      }
      }
 +          snprintf(dir, FAKECHROOT_MAXPATH, "%s", path);
 +      }
      }
+-    else {
+-        snprintf(dir, FAKECHROOT_MAXPATH, "%s", full_path);
+-    }
  
  #if defined(HAVE___XSTAT) && defined(_STAT_VER)
  
  #if defined(HAVE___XSTAT) && defined(_STAT_VER)
+     if ((status = next___xstat(_STAT_VER, dir, &sb)) != 0) {
diff --git a/fakechroot-svn-no-dup-envs.patch b/fakechroot-svn-no-dup-envs.patch
new file mode 100644 (file)
index 0000000..72b33a9
--- /dev/null
@@ -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;