summaryrefslogtreecommitdiff
path: root/src/pacman
diff options
context:
space:
mode:
Diffstat (limited to 'src/pacman')
-rw-r--r--src/pacman/check.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/pacman/check.c b/src/pacman/check.c
index 60a038a1..7109c7a8 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) {