[pacman-dev] [PATCH 1/4] query_fileowner: remove assumption that root is "/"
Andrew Gregory
andrew.gregory.8 at gmail.com
Sat Aug 11 17:35:12 EDT 2012
Returning "/" from mdirname removes it as a special case which allows us to
test it like any other directory. This corrects a false positive when querying
a file in / and root is not set to /.
Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
src/pacman/query.c | 31 ++++++-------------------------
src/pacman/util.c | 5 +++++
2 files changed, 11 insertions(+), 25 deletions(-)
diff --git a/src/pacman/query.c b/src/pacman/query.c
index 11876d8..b1e51a6 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 7f7f6a7..2d1b762 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(".");
--
1.7.11.4
More information about the pacman-dev
mailing list