-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.
---- 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;
#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) {
else {
- snprintf(full_path, FAKECHROOT_MAXPATH, "%s", path);
- }
--
-- 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);
-- }
-- else {
-- snprintf(dir, FAKECHROOT_MAXPATH, "%s", full_path);
+ if (fakechroot_path != NULL) {
+ snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, path);
+ }
+ snprintf(dir, FAKECHROOT_MAXPATH, "%s", path);
+ }
}
+- else {
+- snprintf(dir, FAKECHROOT_MAXPATH, "%s", full_path);
+- }
#if defined(HAVE___XSTAT) && defined(_STAT_VER)
+ if ((status = next___xstat(_STAT_VER, dir, &sb)) != 0) {
--- /dev/null
+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;