summaryrefslogtreecommitdiffstats
path: root/fakechroot-svn-no-dup-envs.patch
blob: 87f8e6fd0b5403c4bcd68d17e677485b45344dcf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Note, this patch has been included in upstream fakechroot >= 2.9

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;