summaryrefslogtreecommitdiffstats
path: root/lib/libalpm
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2012-02-21 00:00:26 +0100
committerDan McGee <dan@archlinux.org>2012-02-21 00:00:26 +0100
commit3849c3aec130601572b9e06b42bb6af5938936de (patch)
treef298f227f4ff591390e55b4f02812f12312dd5c7 /lib/libalpm
parent326c6a8eed60bfd6aa0d653dad722d8637022d68 (diff)
parent78adb71f20ee335dff49e34d33f04817a40002b6 (diff)
downloadpacman-3849c3aec130601572b9e06b42bb6af5938936de.tar.gz
pacman-3849c3aec130601572b9e06b42bb6af5938936de.tar.xz
Merge branch 'maint'
Conflicts: contrib/pacsysclean.in src/pacman/conf.h
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/deps.c29
-rw-r--r--lib/libalpm/diskspace.c14
-rw-r--r--lib/libalpm/dload.c4
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);