summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pacman/query.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/pacman/query.c b/src/pacman/query.c
index e780d6e0..8a8765b6 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -71,6 +71,7 @@ static int query_fileowner(alpm_list_t *targets)
for(t = targets; t; t = alpm_list_next(t)) {
int found = 0;
char *filename = alpm_list_getdata(t);
+ char *bname;
char *rpath;
struct stat buf;
alpm_list_t *i, *j;
@@ -88,6 +89,8 @@ static int query_fileowner(alpm_list_t *targets)
continue;
}
+ bname = mbasename(filename);
+
if(!(rpath = resolve_path(filename))) {
fprintf(stderr, _("error: cannot determine real path for '%s': %s\n"),
filename, strerror(errno));
@@ -103,6 +106,11 @@ static int query_fileowner(alpm_list_t *targets)
snprintf(path, PATH_MAX, "%s%s",
alpm_option_get_root(), (const char *)alpm_list_getdata(j));
+ /* avoid the costly resolve_path usage if the basenames don't match */
+ if(strcmp(mbasename(path), bname) != 0) {
+ continue;
+ }
+
ppath = resolve_path(path);
if(ppath && strcmp(ppath, rpath) == 0) {