diff options
Diffstat (limited to 'lib/libalpm')
| -rw-r--r-- | lib/libalpm/alpm.c | 7 | ||||
| -rw-r--r-- | lib/libalpm/sync.c | 11 | ||||
| -rw-r--r-- | lib/libalpm/sync.h | 4 | ||||
| -rw-r--r-- | lib/libalpm/trans.c | 3 | 
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,  | 
