1 --- ./lib/depends.c.org Sat Jun 16 14:14:11 2001
2 +++ ./lib/depends.c Sat Jun 16 14:19:12 2001
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);
11 - dirMapping[dirNum] = dirMatch - al->dirs;
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;
27 + dirMapping[dirNum] = dirMatch - al->dirs;
37 - if (origNumDirs + al->numDirs)
38 - qsort(al->dirs, al->numDirs, sizeof(dirNeedle), dirInfoCompare);
42 --- ./lib/misc.c.org Sat Jun 16 14:14:12 2001
43 +++ ./lib/misc.c Sat Jun 16 14:14:30 2001
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
56 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
57 + int (*compar) (const void *, const void *))
68 + p = (void *) (((const char *) base) + (idx * size));
69 + comparison = (*compar) (key, p);
72 + else if (comparison > 0)
79 + p = (void *) (((const char *) base) + (l * size));
83 --- ./lib/misc.h.org Sat Jun 16 14:14:12 2001
84 +++ ./lib/misc.h Sat Jun 16 14:14:30 2001
87 void providePackageNVR(Header h);
91 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
92 + int (*compar) (const void *, const void *));