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