From 9700d1849504191ab63fb11718e68081bc491442 Mon Sep 17 00:00:00 2001 From: pawelk Date: Sat, 16 Jun 2001 12:57:56 +0000 Subject: [PATCH] rpm-lfind patch replaced by rpm-alAddPackage.patch It speed up wuch even more then lfind-ptach, and lave API 100% compatybile with orginal rpm api. Changed files: rpm-fast-alAddPackage.patch -> 1.1 rpm.spec -> 1.207 --- rpm-fast-alAddPackage.patch | 97 +++++++++++++++++++++++++++++++++++++ rpm.spec | 3 +- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 rpm-fast-alAddPackage.patch diff --git a/rpm-fast-alAddPackage.patch b/rpm-fast-alAddPackage.patch new file mode 100644 index 0000000..041df8b --- /dev/null +++ b/rpm-fast-alAddPackage.patch @@ -0,0 +1,97 @@ +--- ./lib/depends.c.org Sat Jun 16 14:14:11 2001 ++++ ./lib/depends.c Sat Jun 16 14:19:12 2001 +@@ -335,18 +335,19 @@ + for (dirNum = 0; dirNum < numDirs; dirNum++) { + dirNeedle.dirName = (char *) dirNames[dirNum]; + dirNeedle.dirNameLen = strlen(dirNames[dirNum]); +- dirMatch = bsearch(&dirNeedle, al->dirs, origNumDirs, ++ dirMatch = bsearchnl(&dirNeedle, al->dirs, origNumDirs, + sizeof(dirNeedle), dirInfoCompare); +- if (dirMatch) { +- dirMapping[dirNum] = dirMatch - al->dirs; +- } else { +- dirMapping[dirNum] = al->numDirs; +- al->dirs[al->numDirs].dirName = xstrdup(dirNames[dirNum]); +- al->dirs[al->numDirs].dirNameLen = strlen(dirNames[dirNum]); +- al->dirs[al->numDirs].files = NULL; +- al->dirs[al->numDirs].numFiles = 0; ++ if (dirInfoCompare(dirMatch, &dirNeedle)!=0) { ++ memmove(dirMatch+1, dirMatch, ++ ((al->dirs+al->numDirs) - dirMatch)*sizeof(*al->dirs)); ++ dirMatch->dirName = xstrdup(dirNames[dirNum]); ++ dirMatch->dirNameLen = strlen(dirNames[dirNum]); ++ dirMatch->files = NULL; ++ dirMatch->numFiles = 0; + al->numDirs++; + } ++ dirMapping[dirNum] = dirMatch - al->dirs; ++ + } + + free(dirNames); +@@ -374,9 +375,6 @@ + + first = last + 1; + } +- +- if (origNumDirs + al->numDirs) +- qsort(al->dirs, al->numDirs, sizeof(dirNeedle), dirInfoCompare); + + } + +--- ./lib/misc.c.org Sat Jun 16 14:14:12 2001 ++++ ./lib/misc.c Sat Jun 16 14:14:30 2001 +@@ -869,3 +869,38 @@ + &pEVR, 1); + } + } ++ ++/* Based on glibc's function bsearch. ++ * Modified by Pawel Kolodziej ++ * Perform a binary search for KEY in BASE which has NMEMB elements ++ * of SIZE bytes each. The comparisons are done by (*COMPAR)(). ++ * Return element not less then KEY. Never return NULL ++ */ ++void * ++bsearchnl (const void *key, const void *base, size_t nmemb, size_t size, ++ int (*compar) (const void *, const void *)) ++{ ++ size_t l, u, idx; ++ const void *p; ++ int comparison; ++ ++ l = 0; ++ u = nmemb; ++ while (l < u) ++ { ++ idx = (l + u) / 2; ++ p = (void *) (((const char *) base) + (idx * size)); ++ comparison = (*compar) (key, p); ++ if (comparison < 0) ++ u = idx; ++ else if (comparison > 0) ++ l = idx + 1; ++ else ++ return (void *) p; ++ } ++ if(l > nmemb-1) ++ l=nmemb-1; ++ p = (void *) (((const char *) base) + (l * size)); ++ return (void *)p; ++} ++ +--- ./lib/misc.h.org Sat Jun 16 14:14:12 2001 ++++ ./lib/misc.h Sat Jun 16 14:14:30 2001 +@@ -102,6 +102,12 @@ + */ + void providePackageNVR(Header h); + ++ ++void * ++bsearchnl (const void *key, const void *base, size_t nmemb, size_t size, ++ int (*compar) (const void *, const void *)); ++ ++ + #ifdef __cplusplus + } + #endif diff --git a/rpm.spec b/rpm.spec index d4855a2..2590e7f 100644 --- a/rpm.spec +++ b/rpm.spec @@ -35,7 +35,7 @@ Patch11: %{name}-suggestions.patch Patch12: %{name}-rh-lame.patch Patch13: %{name}-glob.patch Patch14: %{name}-header_h.patch -Patch15: %{name}-deps-lfind.patch +Patch15: %{name}-fast-alAddPackage.patch Patch37: %{name}-short_circuit.patch Patch38: %{name}-section_test.patch BuildRequires: gettext-devel @@ -216,6 +216,7 @@ construir pacotes usando o RPM. %patch12 -p0 %patch11 -p0 %patch12 -p0 +%patch15 -p0 %patch31 -p1 install %{SOURCE2} macros.pld.in %patch38 -p1 -- 2.43.0