summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/package.c
diff options
context:
space:
mode:
authorAaron Griffin <aaron@archlinux.org>2007-02-13 09:15:38 +0100
committerAaron Griffin <aaron@archlinux.org>2007-02-13 09:15:38 +0100
commit103dbb9fd14fde35e116819808e6d4c9b534eaa2 (patch)
tree05e1b6c6f4db530894c6e19694a846975ed6587f /lib/libalpm/package.c
parent3da9fb537a0711ee12f66421703e5529ea5fca6a (diff)
downloadpacman-103dbb9fd14fde35e116819808e6d4c9b534eaa2.tar.gz
pacman-103dbb9fd14fde35e116819808e6d4c9b534eaa2.tar.xz
* Refactored conflict checking within packages. Profiling from Dan showed an
unbelievable amount of strcmp() calls (25 million) due to the list searching. This has been reimplemented with a set-intersection scheme, due to the fact that file lists are always ordered. - NEEDS TESTING * Minor clean up, "globalized" the str_cmp helper to match the alpm comparison signature, so we can use it elsewhere.
Diffstat (limited to 'lib/libalpm/package.c')
-rw-r--r--lib/libalpm/package.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index fa9f0f6b..fb7e5ee8 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -421,6 +421,10 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile)
alpm_list_free(all_files);
}
+ /* this is IMPORTANT - "checking for conflicts" requires a sorted list, so we
+ * ensure that here */
+ info->files = alpm_list_msort(info->files, alpm_list_count(info->files), _alpm_str_cmp);
+
/* internal */
info->origin = PKG_FROM_FILE;
info->data = strdup(pkgfile);