summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/cache.c22
-rw-r--r--lib/libalpm/trans.c3
2 files changed, 21 insertions, 4 deletions
diff --git a/lib/libalpm/cache.c b/lib/libalpm/cache.c
index b140476c..032cc978 100644
--- a/lib/libalpm/cache.c
+++ b/lib/libalpm/cache.c
@@ -98,17 +98,35 @@ alpm_list_t *_alpm_db_get_pkgcache(pmdb_t *db)
return(db->pkgcache);
}
+/* "duplicate" pkg with BASE info (to spare some memory) then add it to pkgcache */
int _alpm_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
{
+ pmpkg_t *newpkg;
+
ALPM_LOG_FUNC;
if(db == NULL || pkg == NULL) {
return(-1);
}
+ newpkg = _alpm_pkg_new();
+ if(newpkg == NULL) {
+ return(-1);
+ }
+ newpkg->name = strdup(pkg->name);
+ newpkg->version = strdup(pkg->version);
+ if(newpkg->name == NULL || newpkg->version == NULL) {
+ pm_errno = PM_ERR_MEMORY;
+ _alpm_pkg_free(newpkg);
+ return(-1);
+ }
+ newpkg->origin = PKG_FROM_CACHE;
+ newpkg->origin_data.db = db;
+ newpkg->infolevel = INFRQ_BASE;
+
_alpm_log(PM_LOG_DEBUG, "adding entry '%s' in '%s' cache\n",
- alpm_pkg_get_name(pkg), db->treename);
- db->pkgcache = alpm_list_add_sorted(db->pkgcache, pkg, _alpm_pkg_cmp);
+ alpm_pkg_get_name(newpkg), db->treename);
+ db->pkgcache = alpm_list_add_sorted(db->pkgcache, newpkg, _alpm_pkg_cmp);
_alpm_db_free_grpcache(db);
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 06084ae9..d6b165d3 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -251,8 +251,7 @@ void _alpm_trans_free(pmtrans_t *trans)
if(trans->type == PM_TRANS_TYPE_SYNC) {
alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_sync_free);
- } else if (trans->type == PM_TRANS_TYPE_REMOVE ||
- trans->type == PM_TRANS_TYPE_REMOVEUPGRADE) {
+ } else {
alpm_list_free_inner(trans->packages, (alpm_list_fn_free)_alpm_pkg_free);
}
alpm_list_free(trans->packages);