1 --- ./lib/depends.c~org Wed Aug 1 22:14:31 2001
2 +++ ./lib/depends.c Wed Aug 1 22:15:57 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;
28 + for(i=0;i<dirNum;i++)
29 + if(dirMapping[i] >= dirMatch - al->dirs)
32 + dirMapping[dirNum] = dirMatch - al->dirs;
42 - if (origNumDirs + al->numDirs)
43 - qsort(al->dirs, al->numDirs, sizeof(dirNeedle), dirInfoCompare);
47 --- ./lib/misc.c~org Wed Aug 1 22:14:31 2001
48 +++ ./lib/misc.c Wed Aug 1 22:13:33 2001
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)().
58 + * Return element not less then KEY. Return NULL if all elements are
62 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
63 + int (*compar) (const void *, const void *))
74 + p = (void *) (((const char *) base) + (idx * size));
75 + comparison = (*compar) (key, p);
78 + else if (comparison > 0)
83 + if(nmemb == 0 || l > nmemb-1)
85 + p = (void *) (((const char *) base) + (l * size));
89 --- ./lib/misc.h~org Wed Aug 1 22:14:31 2001
90 +++ ./lib/misc.h Wed Aug 1 22:13:33 2001
93 void providePackageNVR(Header h);
97 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
98 + int (*compar) (const void *, const void *));