1 --- ./lib/depends.c.org Mon Jun 25 17:59:49 2001
2 +++ ./lib/depends.c Mon Jun 25 18:04:00 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, al->numDirs,
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 (dirMatch==NULL || dirInfoCompare(dirMatch, &dirNeedle)!=0) {
20 + dirMatch=al->dirs+al->numDirs;
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;
29 + dirMapping[dirNum] = dirMatch - al->dirs;
39 - if (origNumDirs + al->numDirs)
40 - qsort(al->dirs, al->numDirs, sizeof(dirNeedle), dirInfoCompare);
44 --- ./lib/misc.c.org Mon Jun 25 17:59:49 2001
45 +++ ./lib/misc.c Mon Jun 25 18:04:36 2001
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)().
55 + * Return element not less then KEY. Return NULL if all elements are
59 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
60 + int (*compar) (const void *, const void *))
71 + p = (void *) (((const char *) base) + (idx * size));
72 + comparison = (*compar) (key, p);
75 + else if (comparison > 0)
82 + p = (void *) (((const char *) base) + (l * size));
86 --- ./lib/misc.h.org Mon Jun 25 17:59:49 2001
87 +++ ./lib/misc.h Mon Jun 25 18:01:53 2001
90 void providePackageNVR(Header h);
94 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
95 + int (*compar) (const void *, const void *));