summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libalpm/conflict.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
index 35946de5..716d0088 100644
--- a/lib/libalpm/conflict.c
+++ b/lib/libalpm/conflict.c
@@ -399,10 +399,11 @@ static alpm_pkg_t *_alpm_find_file_owner(alpm_handle_t *handle, const char *path
return NULL;
}
-static int _alpm_can_overwrite_file(alpm_handle_t *handle, const char *path)
+static int _alpm_can_overwrite_file(alpm_handle_t *handle, const char *path, const char *rootedpath)
{
return handle->trans->flags & ALPM_TRANS_FLAG_FORCE
- || _alpm_fnmatch_patterns(handle->overwrite_files, path) == 0;
+ || _alpm_fnmatch_patterns(handle->overwrite_files, path) == 0
+ || _alpm_fnmatch_patterns(handle->overwrite_files, rootedpath) == 0;
}
/**
@@ -468,7 +469,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle,
/* can skip file-file conflicts when forced *
* checking presence in p2_files detects dir-file or file-dir
* conflicts as the path from p1 is returned */
- if(_alpm_can_overwrite_file(handle, filename)
+ if(_alpm_can_overwrite_file(handle, filename, path)
&& alpm_filelist_contains(p2_files, filename)) {
_alpm_log(handle, ALPM_LOG_DEBUG,
"%s exists in both '%s' and '%s'\n", filename,
@@ -675,7 +676,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle,
/* skip file-file conflicts when being forced */
if(!S_ISDIR(lsbuf.st_mode)
- && _alpm_can_overwrite_file(handle, filestr)) {
+ && _alpm_can_overwrite_file(handle, filestr, path)) {
_alpm_log(handle, ALPM_LOG_DEBUG,
"conflict with file on filesystem being forced\n");
resolved_conflict = 1;