]> git.pld-linux.org Git - packages/rpm.git/blame - rpm-fast-alAddPackage.patch
- Release 29
[packages/rpm.git] / rpm-fast-alAddPackage.patch
CommitLineData
f1e53c7b 1--- ./lib/depends.c.org Mon Jun 25 17:59:49 2001
2+++ ./lib/depends.c Mon Jun 25 18:04:00 2001
3@@ -335,18 +335,21 @@
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++;
28 }
29+ dirMapping[dirNum] = dirMatch - al->dirs;
30+
31 }
32
33 free(dirNames);
f1e53c7b 34@@ -374,9 +377,6 @@
9700d184 35
36 first = last + 1;
37 }
38-
39- if (origNumDirs + al->numDirs)
40- qsort(al->dirs, al->numDirs, sizeof(dirNeedle), dirInfoCompare);
41
42 }
43
f1e53c7b 44--- ./lib/misc.c.org Mon Jun 25 17:59:49 2001
45+++ ./lib/misc.c Mon Jun 25 18:04:36 2001
46@@ -869,3 +869,39 @@
9700d184 47 &pEVR, 1);
48 }
49 }
50+
51+/* Based on glibc's function bsearch.
52+ * Modified by Pawel Kolodziej <pawelk@pld.org.pl>
53+ * Perform a binary search for KEY in BASE which has NMEMB elements
54+ * of SIZE bytes each. The comparisons are done by (*COMPAR)().
f1e53c7b 55+ * Return element not less then KEY. Return NULL if all elements are
56+ * less then KEY
9700d184 57+ */
58+void *
59+bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
60+ int (*compar) (const void *, const void *))
61+{
62+ size_t l, u, idx;
63+ const void *p;
64+ int comparison;
65+
66+ l = 0;
67+ u = nmemb;
68+ while (l < u)
69+ {
70+ idx = (l + u) / 2;
71+ p = (void *) (((const char *) base) + (idx * size));
72+ comparison = (*compar) (key, p);
73+ if (comparison < 0)
74+ u = idx;
75+ else if (comparison > 0)
76+ l = idx + 1;
77+ else
78+ return (void *) p;
79+ }
4010bb0b 80+ if((long)l > (long)nmemb-1)
f1e53c7b 81+ return NULL;
9700d184 82+ p = (void *) (((const char *) base) + (l * size));
83+ return (void *)p;
84+}
85+
f1e53c7b 86--- ./lib/misc.h.org Mon Jun 25 17:59:49 2001
87+++ ./lib/misc.h Mon Jun 25 18:01:53 2001
9700d184 88@@ -102,6 +102,12 @@
89 */
90 void providePackageNVR(Header h);
91
92+
93+void *
94+bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
95+ int (*compar) (const void *, const void *));
96+
97+
98 #ifdef __cplusplus
99 }
100 #endif
This page took 0.04734 seconds and 4 git commands to generate.