summaryrefslogtreecommitdiffstats
path: root/lib/libalpm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/package.c13
-rw-r--r--lib/libalpm/package.h1
-rw-r--r--lib/libalpm/sync.c11
-rw-r--r--lib/libalpm/trans.c7
4 files changed, 18 insertions, 14 deletions
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index b63b5ec0..8e41456e 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -857,6 +857,19 @@ void _alpm_pkg_free(pmpkg_t *pkg)
FREE(pkg);
}
+/* Free transaction specific fields */
+void _alpm_pkg_free_trans(pmpkg_t *pkg)
+{
+ ALPM_LOG_FUNC;
+
+ if(pkg == NULL) {
+ return;
+ }
+
+ alpm_list_free(pkg->removes);
+ pkg->removes = NULL;
+}
+
/* Is spkg an upgrade for locapkg? */
int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg)
{
diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h
index 87e81792..4e4a7b9b 100644
--- a/lib/libalpm/package.h
+++ b/lib/libalpm/package.h
@@ -79,6 +79,7 @@ struct __pmpkg_t {
pmpkg_t* _alpm_pkg_new(void);
pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg);
void _alpm_pkg_free(pmpkg_t *pkg);
+void _alpm_pkg_free_trans(pmpkg_t *pkg);
int _alpm_pkg_cmp(const void *p1, const void *p2);
int _alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg);
pmpkg_t *_alpm_pkg_find(alpm_list_t *haystack, const char *needle);
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 35e6fca4..1d42cd9d 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -379,12 +379,8 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync
}
/* Unresolvable packages will be removed from the target list, so
- we free the transaction specific field: pkg->removes */
- for(i = unresolvable; i; i = i->next) {
- pmpkg_t *pkg = i->data;
- alpm_list_free(pkg->removes);
- pkg->removes = NULL;
- }
+ we free the transaction specific fields */
+ alpm_list_free_inner(unresolvable, (alpm_list_fn_free)_alpm_pkg_free_trans);
/* Set DEPEND reason for pulled packages */
for(i = resolved; i; i = i->next) {
@@ -458,8 +454,7 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync
_alpm_log(PM_LOG_WARNING,
_("removing '%s' from target list because it conflicts with '%s'\n"),
rsync->name, sync->name);
- alpm_list_free(rsync->removes); /* rsync is not transaction target anymore */
- rsync->removes = NULL;
+ _alpm_pkg_free_trans(rsync); /* rsync is not transaction target anymore */
trans->packages = alpm_list_remove(trans->packages, rsync, _alpm_pkg_cmp, NULL);
continue;
}
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 64bec84e..fcbb5e2f 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -248,12 +248,7 @@ void _alpm_trans_free(pmtrans_t *trans)
}
if(trans->type == PM_TRANS_TYPE_SYNC) {
- alpm_list_t *i;
- for(i = trans->packages; i; i = i->next) {
- pmpkg_t *pkg = i->data;
- alpm_list_free(pkg->removes);
- pkg->removes = NULL;
- }
+ alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_pkg_free_trans);
} else {
alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_pkg_free);
}