diff options
Diffstat (limited to 'lib/libalpm')
-rw-r--r-- | lib/libalpm/deps.c | 29 | ||||
-rw-r--r-- | lib/libalpm/diskspace.c | 14 | ||||
-rw-r--r-- | lib/libalpm/dload.c | 4 |
3 files changed, 15 insertions, 32 deletions
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index c58e667e..eda0648d 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -723,12 +723,6 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs, return 0; } - if(handle->trans->flags & ALPM_TRANS_FLAG_RECURSE) { - /* removing local packages from the equation causes the entire dep chain to - * get pulled for each target- e.g., pactree -u output */ - localpkgs = NULL; - } - /* Create a copy of the packages list, so that it can be restored on error */ packages_copy = alpm_list_copy(*packages); @@ -781,29 +775,6 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs, alpm_list_free(deps); } - if(handle->trans->flags & ALPM_TRANS_FLAG_NEEDED) { - /* remove any deps that were pulled that match installed version */ - /* odd loop syntax so we can modify the list as we iterate */ - i = *packages; - while(i) { - alpm_pkg_t *tpkg = i->data; - alpm_pkg_t *local = _alpm_db_get_pkgfromcache( - handle->db_local, tpkg->name); - if(local && _alpm_pkg_compare_versions(tpkg, local) == 0) { - /* with the NEEDED flag, packages up to date are not reinstalled */ - _alpm_log(handle, ALPM_LOG_DEBUG, - "not adding dep %s-%s as it is not needed, same version\n", - local->name, local->version); - j = i; - i = i->next; - *packages = alpm_list_remove_item(*packages, j); - free(j); - } else { - i = i->next; - } - } - } - if(ret != 0) { alpm_list_free(*packages); *packages = packages_copy; diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c index b5c87954..ac7dab00 100644 --- a/lib/libalpm/diskspace.c +++ b/lib/libalpm/diskspace.c @@ -188,8 +188,20 @@ static alpm_mountpoint_t *match_mount_point(const alpm_list_t *mount_points, for(mp = mount_points; mp != NULL; mp = mp->next) { alpm_mountpoint_t *data = mp->data; + /* first, check if the prefix matches */ if(strncmp(data->mount_dir, real_path, data->mount_dir_len) == 0) { - return data; + /* now, the hard work- a file like '/etc/myconfig' shouldn't map to a + * mountpoint '/e', but only '/etc'. If the mountpoint ends in a trailing + * slash, we know we didn't have a mismatch, otherwise we have to do some + * more sanity checks. */ + if(data->mount_dir[data->mount_dir_len - 1] == '/') { + return data; + } else if(strlen(real_path) >= data->mount_dir_len) { + const char next = real_path[data->mount_dir_len]; + if(next == '/' || next == '\0') { + return data; + } + } } } diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 7f898954..05988065 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -436,8 +436,8 @@ static int curl_download_internal(struct dload_payload *payload, curl_easy_setopt(curl, CURLOPT_WRITEDATA, localf); - /* ignore any SIGPIPE signals- these may occur if our FTP socket dies or - * something along those lines. Store the old signal handler first. */ + /* Ignore any SIGPIPE signals. With libcurl, these shouldn't be happening, + * but better safe than sorry. Store the old signal handler first. */ mask_signal(SIGPIPE, SIG_IGN, &orig_sig_pipe); mask_signal(SIGINT, &inthandler, &orig_sig_int); |