]> git.pld-linux.org Git - packages/rpm.git/blame - rpm-fast-alAddPackage.patch
- fixed (finally?) GConf scripts, rel 0.6
[packages/rpm.git] / rpm-fast-alAddPackage.patch
CommitLineData
5b0f0ac9
MM
1--- rpm-4.0.4/lib/depends.c~org Wed Aug 1 22:14:31 2001
2+++ rpm-4.0.4/lib/depends.c Wed Aug 1 22:15:57 2001
4722c9c9 3@@ -335,18 +335,24 @@
9700d184 4 for (dirNum = 0; dirNum < numDirs; dirNum++) {
5 dirNeedle.dirName = (char *) dirNames[dirNum];
6 dirNeedle.dirNameLen = strlen(dirNames[dirNum]);
7- dirMatch = bsearch(&dirNeedle, al->dirs, origNumDirs,
f1e53c7b 8+ dirMatch = bsearchnl(&dirNeedle, al->dirs, al->numDirs,
9700d184 9 sizeof(dirNeedle), dirInfoCompare);
10- if (dirMatch) {
11- dirMapping[dirNum] = dirMatch - al->dirs;
12- } else {
13- dirMapping[dirNum] = al->numDirs;
14- al->dirs[al->numDirs].dirName = xstrdup(dirNames[dirNum]);
15- al->dirs[al->numDirs].dirNameLen = strlen(dirNames[dirNum]);
16- al->dirs[al->numDirs].files = NULL;
17- al->dirs[al->numDirs].numFiles = 0;
f1e53c7b 18+ if (dirMatch==NULL || dirInfoCompare(dirMatch, &dirNeedle)!=0) {
19+ if(dirMatch==NULL)
20+ dirMatch=al->dirs+al->numDirs;
9700d184 21+ memmove(dirMatch+1, dirMatch,
22+ ((al->dirs+al->numDirs) - dirMatch)*sizeof(*al->dirs));
23+ dirMatch->dirName = xstrdup(dirNames[dirNum]);
24+ dirMatch->dirNameLen = strlen(dirNames[dirNum]);
25+ dirMatch->files = NULL;
26+ dirMatch->numFiles = 0;
27 al->numDirs++;
4722c9c9 28+ for(i=0;i<dirNum;i++)
29+ if(dirMapping[i] >= dirMatch - al->dirs)
30+ dirMapping[i]++;
9700d184 31 }
32+ dirMapping[dirNum] = dirMatch - al->dirs;
33+
34 }
35
36 free(dirNames);
4722c9c9 37@@ -374,9 +380,6 @@
9700d184 38
39 first = last + 1;
40 }
41-
42- if (origNumDirs + al->numDirs)
43- qsort(al->dirs, al->numDirs, sizeof(dirNeedle), dirInfoCompare);
44
45 }
46
4722c9c9 47--- ./lib/misc.c~org Wed Aug 1 22:14:31 2001
48+++ ./lib/misc.c Wed Aug 1 22:13:33 2001
f1e53c7b 49@@ -869,3 +869,39 @@
9700d184 50 &pEVR, 1);
51 }
52 }
53+
54+/* Based on glibc's function bsearch.
55+ * Modified by Pawel Kolodziej <pawelk@pld.org.pl>
56+ * Perform a binary search for KEY in BASE which has NMEMB elements
57+ * of SIZE bytes each. The comparisons are done by (*COMPAR)().
f1e53c7b 58+ * Return element not less then KEY. Return NULL if all elements are
59+ * less then KEY
9700d184 60+ */
61+void *
62+bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
63+ int (*compar) (const void *, const void *))
64+{
65+ size_t l, u, idx;
66+ const void *p;
67+ int comparison;
68+
69+ l = 0;
70+ u = nmemb;
71+ while (l < u)
72+ {
73+ idx = (l + u) / 2;
74+ p = (void *) (((const char *) base) + (idx * size));
75+ comparison = (*compar) (key, p);
76+ if (comparison < 0)
77+ u = idx;
78+ else if (comparison > 0)
79+ l = idx + 1;
80+ else
81+ return (void *) p;
82+ }
4722c9c9 83+ if(nmemb == 0 || l > nmemb-1)
f1e53c7b 84+ return NULL;
9700d184 85+ p = (void *) (((const char *) base) + (l * size));
86+ return (void *)p;
87+}
88+
4722c9c9 89--- ./lib/misc.h~org Wed Aug 1 22:14:31 2001
90+++ ./lib/misc.h Wed Aug 1 22:13:33 2001
9700d184 91@@ -102,6 +102,12 @@
92 */
93 void providePackageNVR(Header h);
94
95+
96+void *
97+bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
98+ int (*compar) (const void *, const void *));
99+
100+
101 #ifdef __cplusplus
102 }
103 #endif
This page took 0.053728 seconds and 4 git commands to generate.