summaryrefslogtreecommitdiff
path: root/package/busybox/patches/523-conffiles_fix.patch
blob: 09c93595f5bd71bdef71769f440765147a61f9a1 (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
--- a/archival/libipkg/pkg.c
+++ b/archival/libipkg/pkg.c
@@ -575,25 +575,28 @@
 		    return temp;
 	       }
 
-               len = 14 ;
+               len = sizeof("Conffiles:") ;
 	       for (iter = pkg->conffiles.head; iter; iter = iter->next) {
 		    if (iter->data->name && iter->data->value) {
-                       len = len + (strlen(iter->data->name)+strlen(iter->data->value)+5);
-		    }
+                        /* " <filename> <md5hash>"  */
+		        len += 1+strlen(iter->data->name)+1+strlen(iter->data->value); 
+                    }
 	       }
+               len +=2; /* "\n\0" */
                temp = (char *)realloc(temp,len);
                if ( temp == NULL ){
 	          fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
 	          return NULL;
                }
                temp[0]='\0';
-               strncpy(temp, "Conffiles:\n", 12);
+	       strcpy(temp, "Conffiles:");
 	       for (iter = pkg->conffiles.head; iter; iter = iter->next) {
 		    if (iter->data->name && iter->data->value) {
-                         snprintf(line_str, LINE_LEN, "%s %s\n", iter->data->name, iter->data->value);
+                         snprintf(line_str, LINE_LEN, " %s %s", iter->data->name, iter->data->value);
                          strncat(temp, line_str, strlen(line_str));           
 		    }
 	       }
+               strcat(temp, "\n");
 	  } else if (strcasecmp(field, "Conflicts") == 0) {
 	       int i;
 
--- a/archival/libipkg/pkg_parse.c
+++ b/archival/libipkg/pkg_parse.c
@@ -88,17 +88,14 @@
     if(!strncmp(raw, "Conffiles:", 10))
 	raw += strlen("Conffiles:");
 
+    while(*raw && isspace(*raw)) raw++;
     while(*raw && (sscanf(raw, "%s%s", file_name, md5sum) == 2)){
 	conffile_list_append(&pkg->conffiles, file_name, md5sum);
 	/*	fprintf(stderr, "%s %s ", file_name, md5sum);*/
-	while (*raw && isspace(*raw)) {
-	    raw++;
-	}
 	raw += strlen(file_name);
-	while (*raw && isspace(*raw)) {
-	    raw++;
-	}
+	while(*raw && isspace(*raw)) raw++;
 	raw += strlen(md5sum);
+	while(*raw && isspace(*raw)) raw++;
     }
 }