diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libalpm/add.c | 6 | ||||
| -rw-r--r-- | lib/libalpm/alpm.c | 4 | ||||
| -rw-r--r-- | lib/libalpm/be_files.c | 2 | ||||
| -rw-r--r-- | lib/libalpm/cache.c | 8 | ||||
| -rw-r--r-- | lib/libalpm/deps.c | 2 | ||||
| -rw-r--r-- | lib/libalpm/package.c | 8 | ||||
| -rw-r--r-- | lib/libalpm/package.h | 5 | ||||
| -rw-r--r-- | lib/libalpm/sync.c | 19 | ||||
| -rw-r--r-- | lib/libalpm/trans.c | 7 | 
9 files changed, 35 insertions, 26 deletions
| diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index adbddb28..ed9b622e 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -124,7 +124,7 @@ int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)  					/* pm_errno is already set by pkg_load() */  					goto error;  				} -				FREEPKG(i->data); +				_alpm_pkg_free(i->data);  				i->data = newpkg;  			} else {  				_alpm_log(PM_LOG_WARNING, _("newer version %s-%s is in the target list -- skipping"), @@ -156,7 +156,7 @@ int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)  	return(0);  error: -	FREEPKG(info); +	_alpm_pkg_free(info);  	return(-1);  } @@ -836,7 +836,7 @@ int _alpm_add_commit(pmtrans_t *trans, pmdb_t *db)  		EVENT(trans, (is_upgrade) ? PM_TRANS_EVT_UPGRADE_DONE : PM_TRANS_EVT_ADD_DONE, newpkg, oldpkg); -		FREEPKG(oldpkg); +		_alpm_pkg_free(oldpkg);  	}  	/* run ldconfig if it exists */ diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c index fd467bfc..4239430e 100644 --- a/lib/libalpm/alpm.c +++ b/lib/libalpm/alpm.c @@ -1128,7 +1128,7 @@ alpm_list_t SYMEXPORT *alpm_get_upgrades()  								/* none found -- enter pkg into the final sync list */  								sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL);  								if(sync == NULL) { -									FREEPKG(dummy); +									_alpm_pkg_free(dummy);  									pm_errno = PM_ERR_MEMORY;  									goto error;  								} @@ -1192,7 +1192,7 @@ alpm_list_t SYMEXPORT *alpm_get_upgrades()  				}  				sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, dummy);  				if(sync == NULL) { -					FREEPKG(dummy); +					_alpm_pkg_free(dummy);  					goto error;  				}  				syncpkgs = alpm_list_add(syncpkgs, sync); diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_files.c index 045424c0..8c0b3d69 100644 --- a/lib/libalpm/be_files.c +++ b/lib/libalpm/be_files.c @@ -189,7 +189,7 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)  		/* explicitly read with only 'BASE' data, accessors will handle the rest */  		if(_alpm_db_read(db, pkg, INFRQ_BASE) == -1) {  			/* TODO removed corrupt entry from the FS here */ -			FREEPKG(pkg); +			_alpm_pkg_free(pkg);  		} else {  			pkg->data = db;  			pkg->origin = PKG_FROM_CACHE; diff --git a/lib/libalpm/cache.c b/lib/libalpm/cache.c index 632a9bbd..72825c00 100644 --- a/lib/libalpm/cache.c +++ b/lib/libalpm/cache.c @@ -84,7 +84,11 @@ void _alpm_db_free_pkgcache(pmdb_t *db)  	_alpm_log(PM_LOG_DEBUG, _("freeing package cache for repository '%s'"),  	                        db->treename); -	FREELISTPKGS(db->pkgcache); +	alpm_list_t *tmp; +	for(tmp = db->pkgcache; tmp; tmp = alpm_list_next(tmp)) { +		_alpm_pkg_free(tmp->data); +	} +	db->pkgcache = NULL;  	if(db->grpcache) {  		_alpm_db_free_grpcache(db); @@ -157,7 +161,7 @@ int _alpm_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg)  		return(-1);  	} -	FREEPKG(data); +	_alpm_pkg_free(data);  	_alpm_db_free_grpcache(db); diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index 3fdf0676..3a55dae1 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -656,7 +656,7 @@ int _alpm_resolvedeps(pmdb_t *local, alpm_list_t *dbs_sync, pmpkg_t *syncpkg,  			if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(sync))) {  				pmpkg_t *dummypkg = _alpm_pkg_new(miss->target, NULL);  				QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, dummypkg, sync, NULL, &usedep); -				FREEPKG(dummypkg); +				_alpm_pkg_free(dummypkg);  			}  			if(usedep) {  				trail = alpm_list_add(trail, sync); diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index 531d91a2..a47ae2fc 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -100,10 +100,8 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)  	return(newpkg);  } -void _alpm_pkg_free(void *data) +void _alpm_pkg_free(pmpkg_t *pkg)  { -	pmpkg_t *pkg = data; -  	ALPM_LOG_FUNC;  	if(pkg == NULL) { @@ -125,8 +123,6 @@ void _alpm_pkg_free(void *data)  		FREE(pkg->data);  	}  	FREE(pkg); - -	return;  }  /* Is pkgB an upgrade for pkgA ? */ @@ -455,7 +451,7 @@ pkg_invalid:  		close(fd);  	}  error: -	FREEPKG(info); +	_alpm_pkg_free(info);  	archive_read_finish(archive);  	return(NULL); diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h index 8055c177..212b7a69 100644 --- a/lib/libalpm/package.h +++ b/lib/libalpm/package.h @@ -95,12 +95,9 @@ struct __pmpkg_t {  	pmdbinfrq_t infolevel;  }; -#define FREEPKG(p) do { if(p){_alpm_pkg_free(p); p = NULL;}} while(0) -#define FREELISTPKGS(p) _FREELIST(p, _alpm_pkg_free) -  pmpkg_t* _alpm_pkg_new(const char *name, const char *version);  pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg); -void _alpm_pkg_free(void *data); +void _alpm_pkg_free(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_load(const char *pkgfile); diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 10d1eb61..c0b01da0 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -84,9 +84,15 @@ void _alpm_sync_free(pmsyncpkg_t *sync)  	/* TODO wow this is ugly */  	if(sync->type == PM_SYNC_TYPE_REPLACE) { -		FREELISTPKGS(sync->data); +		alpm_list_t *tmp; +		for(tmp = sync->data; tmp; tmp = alpm_list_next(tmp)) { +			_alpm_pkg_free(tmp->data); +			tmp->data = NULL; +		} +		sync->data = NULL;  	} else { -		FREEPKG(sync->data); +		_alpm_pkg_free(sync->data); +		sync->data = NULL;  	}  	FREE(sync);  } @@ -148,7 +154,7 @@ static int find_replacements(pmtrans_t *trans, pmdb_t *db_local,  							/* none found -- enter pkg into the final sync list */  							sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL);  							if(sync == NULL) { -								FREEPKG(dummy); +								_alpm_pkg_free(dummy);  								pm_errno = PM_ERR_MEMORY;  								goto error;  							} @@ -229,7 +235,7 @@ int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_s  					}  					sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, tmp);  					if(sync == NULL) { -						FREEPKG(tmp); +						_alpm_pkg_free(tmp);  						goto error;  					}  					trans->packages = alpm_list_add(trans->packages, sync); @@ -346,7 +352,7 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy  		}  		sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, dummy);  		if(sync == NULL) { -			FREEPKG(dummy); +			_alpm_pkg_free(dummy);  			RET_ERR(PM_ERR_MEMORY, -1);  		}  		_alpm_log(PM_LOG_DEBUG, _("adding target '%s' to the transaction set"), @@ -591,7 +597,8 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync  							if(sync->type != PM_SYNC_TYPE_REPLACE) {  								/* switch this sync type to REPLACE */  								sync->type = PM_SYNC_TYPE_REPLACE; -								FREEPKG(sync->data); +								_alpm_pkg_free(sync->data); +								sync->data = NULL;  							}  							/* append to the replaces list */  							_alpm_log(PM_LOG_DEBUG, _("electing '%s' for removal"), miss->depend.name); diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c index 54267bfc..e0162524 100644 --- a/lib/libalpm/trans.c +++ b/lib/libalpm/trans.c @@ -86,8 +86,13 @@ void _alpm_trans_free(pmtrans_t *trans)  		}  		FREELIST(trans->packages);  	} else { -		FREELISTPKGS(trans->packages); +		alpm_list_t *tmp; +		for(tmp = trans->packages; tmp; tmp = alpm_list_next(tmp)) { +			_alpm_pkg_free(tmp->data); +			tmp->data = NULL; +		}  	} +	trans->packages = NULL;  	FREELIST(trans->skip_add);  	FREELIST(trans->skip_remove); | 
