From 35ac4e7ef31898b4d8a090c687aad63df1436083 Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Tue, 10 Jul 2012 22:51:41 -0400 Subject: lib/conflict: use a binary search within filelists Take advantage of the fact that our filelists are arrays sorted by filename with a known length and use a binary search. This should speed up file conflict checking, particularly when larger packages are involved. Signed-off-by: Dave Reisner Signed-off-by: Dan McGee --- lib/libalpm/conflict.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'lib/libalpm/conflict.c') diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index 7494fd77..fd4eff13 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -315,19 +315,16 @@ void _alpm_fileconflict_free(alpm_fileconflict_t *conflict) const alpm_file_t *_alpm_filelist_contains(alpm_filelist_t *filelist, const char *name) { - size_t i; - const alpm_file_t *file; + alpm_file_t key; if(!filelist) { return NULL; } - for(file = filelist->files, i = 0; i < filelist->count; file++, i++) { - if(strcmp(file->name, name) == 0) { - return file; - } - } - return NULL; + key.name = (char *)name; + + return bsearch(&key, filelist->files, filelist->count, + sizeof(alpm_file_t), _alpm_files_cmp); } static int dir_belongsto_pkg(alpm_handle_t *handle, const char *dirpath, -- cgit v1.2.3-24-g4f1b