]> git.pld-linux.org Git - packages/rpm.git/blob - rpm-fast-alAddPackage.patch
- added %ifarch for PPC port of PLD :)
[packages/rpm.git] / rpm-fast-alAddPackage.patch
1 --- ./lib/depends.c~org Wed Aug  1 22:14:31 2001
2 +++ ./lib/depends.c     Wed Aug  1 22:15:57 2001
3 @@ -335,18 +335,24 @@
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);
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 (dirMatch==NULL || dirInfoCompare(dirMatch, &dirNeedle)!=0) {
19 +               if(dirMatch==NULL)
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;
27                 al->numDirs++;
28 +               for(i=0;i<dirNum;i++)
29 +                       if(dirMapping[i] >= dirMatch - al->dirs)
30 +                               dirMapping[i]++;
31             }
32 +           dirMapping[dirNum] = dirMatch - al->dirs;
33 +       
34         }
35  
36         free(dirNames);
37 @@ -374,9 +380,6 @@
38  
39             first = last + 1;
40         }
41 -
42 -       if (origNumDirs + al->numDirs)
43 -           qsort(al->dirs, al->numDirs, sizeof(dirNeedle), dirInfoCompare);
44  
45      }
46  
47 --- ./lib/misc.c~org    Wed Aug  1 22:14:31 2001
48 +++ ./lib/misc.c        Wed Aug  1 22:13:33 2001
49 @@ -869,3 +869,39 @@
50                 &pEVR, 1);
51      }
52  }
53 +
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 
59 + * less then KEY
60 + */
61 +void *
62 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
63 +        int (*compar) (const void *, const void *))
64 +{
65 +  size_t l, u, idx;
66 +  const void *p;
67 +  int comparison;
68 +
69 +  l = 0;
70 +  u = nmemb;
71 +  while (l < u)
72 +    {
73 +      idx = (l + u) / 2;
74 +      p = (void *) (((const char *) base) + (idx * size));
75 +      comparison = (*compar) (key, p);
76 +      if (comparison < 0)
77 +       u = idx;
78 +      else if (comparison > 0)
79 +       l = idx + 1;
80 +      else
81 +       return (void *) p;
82 +    }
83 +  if(nmemb == 0 || l > nmemb-1)
84 +         return NULL;
85 +  p = (void *) (((const char *) base) + (l * size));
86 +  return (void *)p;
87 +}
88 +
89 --- ./lib/misc.h~org    Wed Aug  1 22:14:31 2001
90 +++ ./lib/misc.h        Wed Aug  1 22:13:33 2001
91 @@ -102,6 +102,12 @@
92   */
93  void providePackageNVR(Header h);
94  
95 +
96 +void *
97 +bsearchnl (const void *key, const void *base, size_t nmemb, size_t size,
98 +        int (*compar) (const void *, const void *));
99 +
100 +
101  #ifdef __cplusplus
102  }
103  #endif
This page took 0.11258 seconds and 3 git commands to generate.