TODO file added with some ideas.
[febootstrap.git] / fakechroot-svn-no-dup-envs.patch
1 This patch must be applied to fakechroot SVN in order to
2 stop it from passing duplicated environment variables to
3 child processes.  It is not necessary for fakechroot <= 2.8.
4
5 Index: src/libfakechroot.c
6 ===================================================================
7 --- src/libfakechroot.c (revision 311)
8 +++ src/libfakechroot.c (working copy)
9 @@ -1479,7 +1479,7 @@
10      char *env;
11      char tmp[FAKECHROOT_MAXPATH], newfilename[FAKECHROOT_MAXPATH], argv0[FAKECHROOT_MAXPATH];
12      char *ptr;
13 -    unsigned int i, j, n;
14 +    unsigned int i, j, n, len;
15      size_t sizeenvp;
16      char c;
17      char *fakechroot_path, *fakechroot_ptr, fakechroot_buf[FAKECHROOT_MAXPATH];
18 @@ -1519,12 +1519,19 @@
19          errno = ENOMEM;
20          return -1;
21      }
22 -    for (ep = envp, i = 0; *ep != NULL; ++ep, ++i) {
23 -        newenvp[i] = *ep;
24 +    for (ep = envp, i = 0; *ep != NULL; ++ep) {
25 +       for (j = 0; j < sizeof (envkey) / sizeof (char *); j++) {
26 +           len = strlen (envkey[j]);
27 +           if (strncmp (*ep, envkey[j], len) == 0 && (*ep)[len] == '=')
28 +               goto skip;
29 +       }
30 +       newenvp[i] = *ep;
31 +       i++;
32 +    skip: ;
33      }
34  
35      /* Add our variables to newenvp */
36 -    newenvp = realloc( newenvp, ((sizeenvp + 1) * sizeof(char *) + sizeof(envkey)) );
37 +    newenvp = realloc( newenvp, i * sizeof(char *) + sizeof(envkey) );
38      if (newenvp == NULL) {
39          errno = ENOMEM;
40          return -1;