diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/cache.c | 22 | ||||
-rw-r--r-- | lib/libalpm/trans.c | 3 |
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); |