summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/alpm.c7
-rw-r--r--lib/libalpm/sync.c11
-rw-r--r--lib/libalpm/sync.h4
-rw-r--r--lib/libalpm/trans.c3
4 files changed, 14 insertions, 11 deletions
diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
index 1b7eea59..63b418c1 100644
--- a/lib/libalpm/alpm.c
+++ b/lib/libalpm/alpm.c
@@ -1203,7 +1203,12 @@ alpm_list_t SYMEXPORT *alpm_get_upgrades()
return(syncpkgs);
error:
if(syncpkgs) {
- alpm_list_free_inner(syncpkgs, _alpm_sync_free);
+ alpm_list_t *tmp;
+ for(tmp = syncpkgs; tmp; tmp = alpm_list_next(tmp)) {
+ if(tmp->data) {
+ _alpm_sync_free(tmp->data);
+ }
+ }
alpm_list_free(syncpkgs);
}
return(NULL);
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index de235d71..73c61873 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -74,10 +74,8 @@ pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data)
return(sync);
}
-void _alpm_sync_free(void *data)
+void _alpm_sync_free(pmsyncpkg_t *sync)
{
- pmsyncpkg_t *sync = data;
-
ALPM_LOG_FUNC;
if(sync == NULL) {
@@ -90,6 +88,7 @@ void _alpm_sync_free(void *data)
FREEPKG(sync->data);
}
FREE(sync);
+ sync = NULL;
}
/* Find recommended replacements for packages during a sync.
@@ -433,7 +432,7 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync
sync = _alpm_sync_find(trans->packages, pkgname);
trans->packages = alpm_list_remove(trans->packages, sync, syncpkg_cmp, &vpkg);
- FREESYNC(vpkg);
+ _alpm_sync_free(vpkg);
}
}
}
@@ -565,7 +564,7 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync
void *vpkg;
_alpm_log(PM_LOG_DEBUG, _("removing '%s' from target list"), rsync->pkg->name);
trans->packages = alpm_list_remove(trans->packages, rsync, syncpkg_cmp, &vpkg);
- FREESYNC(vpkg);
+ _alpm_sync_free(vpkg);
continue;
}
}
@@ -602,7 +601,7 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync
void *vpkg;
_alpm_log(PM_LOG_DEBUG, _("removing '%s' from target list"), miss->depend.name);
trans->packages = alpm_list_remove(trans->packages, rsync, syncpkg_cmp, &vpkg);
- FREESYNC(vpkg);
+ _alpm_sync_free(vpkg);
}
} else {
/* abort */
diff --git a/lib/libalpm/sync.h b/lib/libalpm/sync.h
index 3ba7e009..ef094b5c 100644
--- a/lib/libalpm/sync.h
+++ b/lib/libalpm/sync.h
@@ -32,10 +32,8 @@ struct __pmsyncpkg_t {
void *data;
};
-#define FREESYNC(p) do { if(p) { _alpm_sync_free(p); p = NULL; } } while(0)
-
pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data);
-void _alpm_sync_free(void *data);
+void _alpm_sync_free(pmsyncpkg_t *data);
int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync);
int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, char *name);
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 27e22bc6..a101be4c 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -81,7 +81,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) {
- FREESYNC(i->data);
+ _alpm_sync_free(i->data);
}
FREELIST(trans->packages);
} else {
@@ -92,6 +92,7 @@ void _alpm_trans_free(pmtrans_t *trans)
FREELIST(trans->skip_remove);
FREE(trans);
+ trans = NULL;
}
int _alpm_trans_init(pmtrans_t *trans, pmtranstype_t type, pmtransflag_t flags,