Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=cef2d7b9377225ca5a2058be9dfbcf485494a27d
commit cef2d7b9377225ca5a2058be9dfbcf485494a27d Author: Michel Hermier <[email protected]> Date: Wed Sep 3 09:26:32 2014 +0200 libpacman: Make trans->packages not a pointer. diff --git a/lib/libpacman/conflict.cpp b/lib/libpacman/conflict.cpp index 456ec43..a0bdc04 100644 --- a/lib/libpacman/conflict.cpp +++ b/lib/libpacman/conflict.cpp @@ -238,20 +238,19 @@ FPtrList *_pacman_db_find_conflicts(pmtrans_t *trans) char path[PATH_MAX+1]; struct stat buf; FPtrList *conflicts = NULL; - FPtrList *targets = trans->packages; Package *p, *dbpkg; double percent; int howmany, remain; Database *db_local = trans->m_handle->db_local; const char *root = trans->m_handle->root; - if(db_local == NULL || targets == NULL || root == NULL) { + if(db_local == NULL || trans->packages.empty() || root == NULL) { return(NULL); } - howmany = f_ptrlist_count(targets); + howmany = f_ptrlist_count(&trans->packages); /* CHECK 1: check every target against every target */ - for(auto i = targets->begin(), end = targets->end(); i != end; i = i->next()) { + for(auto i = trans->packages.begin(), end = trans->packages.end(); i != end; i = i->next()) { Package *p1 = (Package*)f_ptrlistitem_data(i); remain = f_ptrlistiterator_count(i, end); percent = (double)(howmany - remain + 1) / howmany; @@ -307,7 +306,7 @@ FPtrList *_pacman_db_find_conflicts(pmtrans_t *trans) /* Check if the conflicting file has been moved to another package/target */ if(!ok) { /* Look at all the targets */ - for(auto k = targets->begin(), k_end = targets->end(); k != k_end && !ok; k = k->next()) { + for(auto k = trans->packages.begin(), k_end = trans->packages.end(); k != k_end && !ok; k = k->next()) { Package *p2 = (Package *)f_ptrlistitem_data(k); /* As long as they're not the current package */ if(strcmp(p2->name(), p->name())) { diff --git a/lib/libpacman/db/fakedb.cpp b/lib/libpacman/db/fakedb.cpp index 330c104..c4ddde7 100644 --- a/lib/libpacman/db/fakedb.cpp +++ b/lib/libpacman/db/fakedb.cpp @@ -85,7 +85,7 @@ int _pacman_fakedb_addtarget(pmtrans_t *trans, const char *name) if (dummy == NULL) return -1; /* add the package to the transaction */ - trans->packages = trans->packages->add(dummy); + trans->packages.add(dummy); return(0); } diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp index efda819..f69ac1b 100644 --- a/lib/libpacman/deps.cpp +++ b/lib/libpacman/deps.cpp @@ -271,7 +271,7 @@ FPtrList *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, FPtrList *packag /* check requiredby fields */ if(!_pacman_pkg_isin(requiredby_name, packages)) { /* check if a package in trans->packages provides this package */ - for(auto k = trans->packages->begin(), k_end = trans->packages->end(); !found && k != k_end; k = k->next()) { + for(auto k = trans->packages.begin(), k_end = trans->packages.end(); !found && k != k_end; k = k->next()) { Package *spkg = f_ptrlistitem_data(k); if(spkg && spkg->provides(pkg_local->name())) { diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp index fc5b622..b5f3a52 100644 --- a/lib/libpacman/pacman.cpp +++ b/lib/libpacman/pacman.cpp @@ -1028,7 +1028,7 @@ void *pacman_trans_getinfo(unsigned char parm) case PM_TRANS_TYPE: data = (void *)(long)trans->m_type; break; case PM_TRANS_FLAGS: data = (void *)(long)trans->flags; break; case PM_TRANS_TARGETS: data = trans->targets; break; - case PM_TRANS_PACKAGES: data = trans->packages ? trans->packages : trans->syncpkgs; break; + case PM_TRANS_PACKAGES: data = !trans->packages.empty() ? &trans->packages : trans->syncpkgs; break; case PM_TRANS_SYNCPKGS: data = trans->syncpkgs; break; default: data = NULL; diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp index 50437d1..5c58bc1 100644 --- a/lib/libpacman/trans.cpp +++ b/lib/libpacman/trans.cpp @@ -104,7 +104,7 @@ __pmtrans_t::~__pmtrans_t() /* Sanity checks */ // ASSERT(state != STATE_COMMITING, RET_ERR(PM_ERR_TRANS_COMMITING, -1)); - FREELISTPKGS(packages); + packages.clear(/* _pacman_pkg_delete */); #if 0 { FVisitor visitor = { @@ -126,7 +126,7 @@ static int _pacman_trans_compute_triggers(pmtrans_t *trans) { /* NOTE: Not the most efficient way, but will do until we add some string hash. */ - for(auto lp = trans->packages->begin(), end = trans->packages->end(); lp != end; lp = lp->next()) { + for(auto lp = trans->packages.begin(), end = trans->packages.end(); lp != end; lp = lp->next()) { Package *pkg = f_ptrlistitem_data(lp); trans->triggers = f_stringlist_add_stringlist(trans->triggers, pkg->triggers()); @@ -273,7 +273,7 @@ int __pmtrans_t::add(Package *pkg, pmtranstype_t type, int flags) ASSERT(pkg != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); _pacman_log(PM_LOG_FLOW2, _("adding %s in the targets list"), pkg->name()); - packages = packages->add(pkg); + packages.add(pkg); return 0; } @@ -429,9 +429,8 @@ int __pmtrans_t::add(const char *target, pmtranstype_t type, int flags) /* check if an older version of said package is already in transaction packages. * if so, replace it in the list */ - FPtrListIterator *i; - auto end = packages->end(); - for(i = packages->begin(); i != end; i = i->next()) { + FPtrListIterator *i, *end; + for(i = packages.begin(), end = packages.end(); i != end; i = i->next()) { Package *pkg = f_ptrlistitem_data(i); if(strcmp(pkg->name(), pkg_new->name()) == 0) { pkg_queued = pkg; @@ -454,7 +453,7 @@ int __pmtrans_t::add(const char *target, pmtranstype_t type, int flags) } } if(type == PM_TRANS_TYPE_REMOVE) { - if(_pacman_pkg_isin(target, packages)) { + if(_pacman_pkg_isin(target, &packages)) { RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1); } @@ -502,7 +501,7 @@ int __pmtrans_t::prepare(FPtrList **data) } /* If there's nothing to do, return without complaining */ - if(packages->empty() && + if(packages.empty() && syncpkgs->empty()) { return(0); } @@ -883,7 +882,7 @@ cleanup: EVENT(this, PM_TRANS_EVT_CHECKDEPS_START, NULL, NULL); _pacman_log(PM_LOG_FLOW1, _("looking for unsatisfied dependencies")); - lp = _pacman_checkdeps(this, m_type, packages); + lp = _pacman_checkdeps(this, m_type, &packages); /* look for unsatisfied dependencies */ if(lp != NULL) { @@ -894,14 +893,14 @@ cleanup: Package *pkg_local = db_local->scan(miss->depend.name, INFRQ_ALL); if(pkg_local) { _pacman_log(PM_LOG_FLOW2, _("pulling %s in the targets list"), pkg_local->name()); - packages = packages->add(pkg_local); + packages.add(pkg_local); } else { _pacman_log(PM_LOG_ERROR, _("could not find %s in database -- skipping"), miss->depend.name); } } FREELIST(lp); - lp = _pacman_checkdeps(this, m_type, packages); + lp = _pacman_checkdeps(this, m_type, &packages); } } } @@ -917,7 +916,7 @@ cleanup: if(m_type & PM_TRANS_TYPE_ADD) { /* no unsatisfied deps, so look for conflicts */ _pacman_log(PM_LOG_FLOW1, _("looking for conflicts")); - lp = _pacman_checkconflicts(this, packages); + lp = _pacman_checkconflicts(this, &packages); if(lp != NULL) { if(data) { *data = lp; @@ -929,24 +928,24 @@ cleanup: /* re-order w.r.t. dependencies */ _pacman_log(PM_LOG_FLOW1, _("sorting by dependencies")); - lp = _pacman_sortbydeps(packages, PM_TRANS_TYPE_ADD); + lp = _pacman_sortbydeps(&packages, PM_TRANS_TYPE_ADD); /* free the old alltargs */ - FREELISTPTR(packages); - packages = lp; + packages.clear(); + packages = *lp; } if(m_type == PM_TRANS_TYPE_REMOVE && m_type != PM_TRANS_TYPE_UPGRADE) { if(flags & PM_TRANS_FLAG_RECURSE) { _pacman_log(PM_LOG_FLOW1, _("finding removable dependencies")); - packages = _pacman_removedeps(db_local, packages); + _pacman_removedeps(db_local, &packages); } /* re-order w.r.t. dependencies */ _pacman_log(PM_LOG_FLOW1, _("sorting by dependencies")); - lp = _pacman_sortbydeps(packages, PM_TRANS_TYPE_REMOVE); + lp = _pacman_sortbydeps(&packages, PM_TRANS_TYPE_REMOVE); /* free the old alltargs */ - FREELISTPTR(packages); - packages = lp; + packages.clear(); + packages = *lp; } EVENT(this, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL); } @@ -956,7 +955,7 @@ cleanup: if(m_type & PM_TRANS_TYPE_ADD) { EVENT(this, PM_TRANS_EVT_CLEANUP_START, NULL, NULL); _pacman_log(PM_LOG_FLOW1, _("cleaning up")); - for (auto lp = packages->begin(), lp_end = packages->end(); lp != lp_end; lp = lp->next()) { + for (auto lp = packages.begin(), lp_end = packages.end(); lp != lp_end; lp = lp->next()) { Package *pkg_new = (Package *)f_ptrlistitem_data(lp); auto removes = pkg_new->removes(); @@ -1417,7 +1416,7 @@ int __pmtrans_t::commit(FPtrList **data) *data = NULL; /* If there's nothing to do, return without complaining */ - if(packages->empty() && + if(packages.empty() && syncpkgs->empty()) { return(0); } @@ -1552,7 +1551,7 @@ int __pmtrans_t::commit(FPtrList **data) FPtrList *list = (FPtrList *)ps->data; for(auto j = list->begin(), end = list->end(); j != end; j = j->next()) { Package *pkg = f_ptrlistitem_data(j); - if(!_pacman_pkg_isin(pkg->name(), tr->packages)) { + if(!_pacman_pkg_isin(pkg->name(), &tr->packages)) { if(tr->add(pkg->name(), tr->m_type, tr->flags) == -1) { goto error; } @@ -1596,7 +1595,7 @@ int __pmtrans_t::commit(FPtrList **data) } /* using f_ptrlist_last() is ok because addtarget() adds the new target at the * end of the tr->packages list */ - spkg = f_ptrlistitem_data(f_ptrlist_last(tr->packages)); + spkg = f_ptrlistitem_data(tr->packages.last()); if(ps->type == PM_SYNC_TYPE_DEPEND || flags & PM_TRANS_FLAG_ALLDEPS) { spkg->m_reason = PM_PKG_REASON_DEPEND; } else if(ps->type == PM_SYNC_TYPE_UPGRADE && !m_handle->sysupgrade) { @@ -1679,9 +1678,9 @@ int __pmtrans_t::commit(FPtrList **data) int ret = 0; time_t t; - howmany = f_ptrlist_count(packages); + howmany = f_ptrlist_count(&packages); - for(auto targ = packages->begin(), end = packages->end(); targ != end; targ = targ->next()) { + for(auto targ = packages.begin(), end = packages.end(); targ != end; targ = targ->next()) { Package *pkg_new = NULL, *pkg_local = NULL; void *event_arg0 = NULL, *event_arg1 = NULL; pmtranstype_t type = m_type; @@ -1791,7 +1790,7 @@ int __pmtrans_t::commit(FPtrList **data) * its requiredby info: it is in the process of being removed (if not * already done!) */ - if(_pacman_pkg_isin(depend.name, packages)) { + if(_pacman_pkg_isin(depend.name, &packages)) { continue; } depinfo = db_local->find(depend.name); diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h index 6c103de..a45cdfd 100644 --- a/lib/libpacman/trans.h +++ b/lib/libpacman/trans.h @@ -74,7 +74,7 @@ struct __pmtrans_t unsigned int flags; unsigned char state; FStringList *targets; - FPtrList *packages; /* FPtrList of (pmpkg_t *) or (pmsyncpkg_t *) */ + FPtrList packages; /* FPtrList of (pmpkg_t *) or (pmsyncpkg_t *) */ FPtrList *syncpkgs; /* FPtrList of (pmsyncpkg_t *) */ FStringList *skiplist; FStringList *triggers; diff --git a/lib/libpacman/util.cpp b/lib/libpacman/util.cpp index ad9bdad..2e09913 100644 --- a/lib/libpacman/util.cpp +++ b/lib/libpacman/util.cpp @@ -482,7 +482,7 @@ int _pacman_check_freespace(pmtrans_t *trans, pmlist_t **data) { long long pkgsize=0, freespace; - for(auto i = trans->packages->begin(), end = trans->packages->end(); i != end; i = i->next()) { + for(auto i = trans->packages.begin(), end = trans->packages.end(); i != end; i = i->next()) { Package *pkg = f_ptrlistitem_data(i); pkgsize += pkg->size; } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
