TODO file added with some ideas.
[febootstrap.git] / fakechroot-2.8-relchroot.patch
1 This patch must be applied to fakeroot 2.8 or SVN in order to
2 enable correct handling of relative chroots, for rpm and yum.
3
4 Index: src/libfakechroot.c
5 ===================================================================
6 --- src/libfakechroot.c (revision 311)
7 +++ src/libfakechroot.c (working copy)
8 @@ -1147,7 +1147,7 @@
9  {
10      char *ptr, *ld_library_path, *tmp, *fakechroot_path;
11      int status, len;
12 -    char dir[FAKECHROOT_MAXPATH], cwd[FAKECHROOT_MAXPATH], full_path[FAKECHROOT_MAXPATH];
13 +    char dir[FAKECHROOT_MAXPATH], cwd[FAKECHROOT_MAXPATH];
14  #if !defined(HAVE_SETENV)
15      char *envbuf;
16  #endif
17 @@ -1162,7 +1162,9 @@
18          return -1;
19      }
20      if (*path != '/') {
21 -        if (getcwd(cwd, FAKECHROOT_MAXPATH) == NULL) {
22 +        if (next_getcwd == NULL) fakechroot_init();
23 +
24 +        if (next_getcwd(cwd, FAKECHROOT_MAXPATH) == NULL) {
25              errno = ENAMETOOLONG;
26              return -1;
27          }
28 @@ -1171,24 +1173,22 @@
29              return -1;
30          }
31          if (strcmp(cwd, "/") == 0) {
32 -            snprintf(full_path, FAKECHROOT_MAXPATH, "/%s", path);
33 +            snprintf(dir, FAKECHROOT_MAXPATH, "/%s", path);
34          }
35          else {
36 -            snprintf(full_path, FAKECHROOT_MAXPATH, "%s/%s", cwd, path);
37 +            snprintf(dir, FAKECHROOT_MAXPATH, "%s/%s", cwd, path);
38          }
39      }
40      else {
41 -        snprintf(full_path, FAKECHROOT_MAXPATH, "%s", path);
42 -    }
43 +       fakechroot_path = getenv("FAKECHROOT_BASE");
44  
45 -    fakechroot_path = getenv("FAKECHROOT_BASE");
46 -
47 -    if (fakechroot_path != NULL) {
48 -        snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, full_path);
49 +       if (fakechroot_path != NULL) {
50 +           snprintf(dir, FAKECHROOT_MAXPATH, "%s%s", fakechroot_path, path);
51 +       }
52 +       else {
53 +           snprintf(dir, FAKECHROOT_MAXPATH, "%s", path);
54 +       }
55      }
56 -    else {
57 -        snprintf(dir, FAKECHROOT_MAXPATH, "%s", full_path);
58 -    }
59  
60  #if defined(HAVE___XSTAT) && defined(_STAT_VER)
61      if ((status = next___xstat(_STAT_VER, dir, &sb)) != 0) {