summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pacman/query.c31
-rw-r--r--src/pacman/util.c5
2 files changed, 11 insertions, 25 deletions
diff --git a/src/pacman/query.c b/src/pacman/query.c
index 50b52dd7..ed8bc1b5 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -173,21 +173,12 @@ static int query_fileowner(alpm_list_t *targets)
bname = mbasename(filename);
dname = mdirname(filename);
- /* for files in '/', there is no directory name to match */
- if(strcmp(dname, "") == 0) {
- rpath = NULL;
- } else {
- rpath = realpath(dname, NULL);
+ rpath = realpath(dname, NULL);
- if(!rpath) {
- pm_printf(ALPM_LOG_ERROR, _("cannot determine real path for '%s': %s\n"),
- filename, strerror(errno));
- free(filename);
- free(dname);
- free(rpath);
- ret++;
- continue;
- }
+ if(!dname || !rpath) {
+ pm_printf(ALPM_LOG_ERROR, _("cannot determine real path for '%s': %s\n"),
+ filename, strerror(errno));
+ goto targcleanup;
}
free(dname);
@@ -206,21 +197,11 @@ static int query_fileowner(alpm_list_t *targets)
continue;
}
- /* for files in '/', there is no directory name to match */
- if(!rpath) {
- if(strcmp(pkgfile, bname) == 0) {
- print_query_fileowner(filename, info);
- found = 1;
- break;
- }
- continue;
- }
-
+ /* concatenate our file and the root path */
if(rootlen + 1 + strlen(pkgfile) > PATH_MAX) {
pm_printf(ALPM_LOG_ERROR, _("path too long: %s%s\n"), path, pkgfile);
continue;
}
- /* concatenate our file and the root path */
strcpy(path + rootlen, pkgfile);
pdname = mdirname(path);
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 7f7f6a74..2d1b7626 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -244,9 +244,14 @@ char *mdirname(const char *path)
if(last != NULL) {
/* we found a '/', so terminate our string */
+ if(last == ret) {
+ /* return "/" for root */
+ last++;
+ }
*last = '\0';
return ret;
}
+
/* no slash found */
free(ret);
return strdup(".");