[pacman-dev] [PATCH 5/5] check_pkg_fast: check file type
Andrew Gregory
andrew.gregory.8 at gmail.com
Thu Jun 26 12:52:59 EDT 2014
Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
src/pacman/check.c | 15 +++++++++++++--
test/pacman/tests/querycheck_fast_file_type.py | 2 --
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/pacman/check.c b/src/pacman/check.c
index 60a038a..7109c7a 100644
--- a/src/pacman/check.c
+++ b/src/pacman/check.c
@@ -210,14 +210,25 @@ int check_pkg_fast(alpm_pkg_t *pkg)
const alpm_file_t *file = filelist->files + i;
struct stat st;
const char *path = file->name;
+ size_t plen = strlen(path);
- if(rootlen + 1 + strlen(path) > PATH_MAX) {
+ if(rootlen + 1 + plen > PATH_MAX) {
pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path);
continue;
}
strcpy(filepath + rootlen, path);
- errors += check_file_exists(pkgname, filepath, &st);
+ if(check_file_exists(pkgname, filepath, &st) == 0) {
+ int expect_dir = path[plen - 1] == '/' ? 1 : 0;
+ int is_dir = S_ISDIR(st.st_mode) ? 1 : 0;
+ if(expect_dir != is_dir) {
+ pm_printf(ALPM_LOG_WARNING, _("%s: %s (File type mismatch)\n"),
+ pkgname, filepath);
+ ++errors;
+ }
+ } else {
+ ++errors;
+ }
}
if(!config->quiet) {
diff --git a/test/pacman/tests/querycheck_fast_file_type.py b/test/pacman/tests/querycheck_fast_file_type.py
index a19fcee..f53bada 100644
--- a/test/pacman/tests/querycheck_fast_file_type.py
+++ b/test/pacman/tests/querycheck_fast_file_type.py
@@ -10,5 +10,3 @@
self.addrule("PACMAN_RETCODE=1")
self.addrule("PACMAN_OUTPUT=warning.*(File type mismatch)")
-
-self.expectfailure = True
--
2.0.0
More information about the pacman-dev
mailing list