Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=88002e8bb66bdaa8b34f15bd956b5a6a47b73339
commit 88002e8bb66bdaa8b34f15bd956b5a6a47b73339 Author: Michel Hermier <[email protected]> Date: Thu Sep 11 13:23:21 2014 +0200 libpacman: Make FStringList inherit of FList<const char *>. diff --git a/lib/libpacman/cache.cpp b/lib/libpacman/cache.cpp index ba92763..0fbfcff 100644 --- a/lib/libpacman/cache.cpp +++ b/lib/libpacman/cache.cpp @@ -185,7 +185,7 @@ int _pacman_db_load_grpcache(Database *db) f_ptrlist_add_sorted(&db->grpcache, grp, _pacman_grp_cmp); } if(!_pacman_list_is_strin(pkg->name(), &grp->packages)) { - f_ptrlist_add_sorted(&grp->packages, pkg->name(), strcmp); + grp->packages.add_sorted(pkg->name(), strcmp); } } } diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp index e9aab2c..2599ba3 100644 --- a/lib/libpacman/deps.cpp +++ b/lib/libpacman/deps.cpp @@ -422,7 +422,7 @@ FPtrList _pacman_checkdeps(pmtrans_t *trans, unsigned char op, const FPtrList &p return(baddeps); } -int _pacman_splitdep(char *depstr, pmdepend_t *depend) +int _pacman_splitdep(const char *depstr, pmdepend_t *depend) { char *str = NULL; char *ptr = NULL; @@ -711,10 +711,10 @@ static int str_cmp(const void *s1, const void *s2) return(strcmp(s1, s2)); } -int inList(FPtrList *lst, char *lItem) { +int inList(FStringList *lst, char *lItem) { auto ll = lst->begin(), end = lst->end(); while(ll != end) { - if(!strcmp(lItem, (const char *)*ll)) { + if(!strcmp(lItem, *ll)) { return 1; } ++ll; @@ -736,7 +736,7 @@ int pacman_output_generate(FStringList *targets, FPtrList *dblist) { pkg = db->readpkg(inforeq); while(pkg != NULL) { const char *pname = pkg->name(); - if(_pacman_list_remove(targets, (void*) pname, str_cmp, (void **)&match)) { + if(targets != NULL && targets->remove((void*) pname, str_cmp, (const char **)&match)) { foundMatch = 1; auto &depends = pkg->depends(); for(auto k = depends.begin(), k_end = depends.end(); k != k_end; ++k) { @@ -747,7 +747,7 @@ int pacman_output_generate(FStringList *targets, FPtrList *dblist) { } strcpy(fullDep, depend.name); if(!inList(&found, fullDep) && !inList(targets, fullDep)) { - targets = f_ptrlist_add(targets, fullDep); + targets = f_stringlist_add(targets, fullDep); } } if(!inList(&found,pname)) { diff --git a/lib/libpacman/deps.h b/lib/libpacman/deps.h index edb88df..c040c6b 100644 --- a/lib/libpacman/deps.h +++ b/lib/libpacman/deps.h @@ -45,7 +45,7 @@ FPtrList &_pacman_depmisslist_add(FPtrList &misslist, pmdepmissing_t *miss); FPtrList _pacman_sortbydeps(const FPtrList &targets, int mode); FPtrList _pacman_checkdeps(pmtrans_t *trans, unsigned char op, const FPtrList &packages); -int _pacman_splitdep(char *depstr, pmdepend_t *depend); +int _pacman_splitdep(const char *depstr, pmdepend_t *depend); FPtrList &_pacman_removedeps(libpacman::Database *db, FPtrList &targs); int _pacman_resolvedeps(pmtrans_t *trans, libpacman::Package *syncpkg, FPtrList &list, FPtrList &trail, FPtrList **data); diff --git a/lib/libpacman/package/packagecache.cpp b/lib/libpacman/package/packagecache.cpp index f81a3d6..b23557a 100644 --- a/lib/libpacman/package/packagecache.cpp +++ b/lib/libpacman/package/packagecache.cpp @@ -73,7 +73,7 @@ int _pacman_packagecache_clean(int level) clean.add(str); continue; } - for(FPtrList::iterator j = i.next(); j != end; ++j) { + for(auto j = i.next(); j != end; ++j) { const char *s = *j; char n[PKG_NAME_LEN], v[PKG_VERSION_LEN]; diff --git a/lib/libpacman/pacman_p.h b/lib/libpacman/pacman_p.h index a1b225b..b888130 100644 --- a/lib/libpacman/pacman_p.h +++ b/lib/libpacman/pacman_p.h @@ -52,6 +52,14 @@ DEFINE_CAST(struct __pmlist_t, FPtrList) DEFINE_CAST(struct __pmpkg_t, libpacman::Package) //DEFINE_CAST(struct __pmtrans_t, libpacman::Transaction) +template <typename T> +static inline __pmlist_t *c_cast(FList<T> &obj) +{ return (__pmlist_t *)&obj; } + +template <typename T> +static inline __pmlist_t *c_cast(FList<T> *obj) +{ return (__pmlist_t *)obj; } + #undef DEFINE_CAST #endif /* _PACMAN_P_H */ diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp index 7bb01f6..1decee8 100644 --- a/lib/libpacman/trans.cpp +++ b/lib/libpacman/trans.cpp @@ -1120,7 +1120,7 @@ int _pacman_fpmpackage_install(Package *pkg, pmtranstype_t type, pmtrans_t *tran } sprintf(fn, "%s\t%s", file, sha1_pkg); } - lp.m_iterable->swap_data((void **)&fn); + lp.m_iterable->swap_data((const char *&)fn); free(fn); } } @@ -1256,7 +1256,7 @@ int _pacman_fpmpackage_install(Package *pkg, pmtranstype_t type, pmtrans_t *tran sprintf(fn, "%s\t%s", file, sha1); FREE(sha1); } - lp.m_iterable->swap_data((void **)fn); + lp.m_iterable->swap_data((const char *&)fn); free(fn); } } @@ -1612,8 +1612,8 @@ int __pmtrans_t::commit(FPtrList **data) auto &depends = depender->depends(); for(auto m = depends.begin(), end = depends.end(); m != end; ++m) { if(!strcmp((const char *)*m, old->name())) { - void *str = strdup(pkg_new->name()); - m.m_iterable->swap_data(&str); + const char *str = strdup(pkg_new->name()); + m.m_iterable->swap_data(str); free(str); } } @@ -1783,8 +1783,9 @@ int __pmtrans_t::commit(FPtrList **data) } } /* splice out this entry from requiredby */ - _pacman_list_remove(&depinfo->requiredby(), pkg_local->name(), str_cmp, (void **)&data); - FREE(data); + if(depinfo->requiredby().remove((void *)pkg_local->name(), str_cmp, (const char **)&data)) { + FREE(data); + } _pacman_log(PM_LOG_DEBUG, _("updating 'requiredby' field for package '%s'"), depinfo->name()); if(db_local->write(depinfo, INFRQ_DEPENDS)) { _pacman_log(PM_LOG_ERROR, _("could not update 'requiredby' database entry %s-%s"), diff --git a/lib/libpacman/util/flist.h b/lib/libpacman/util/flist.h index 9bd335f..67c87f1 100644 --- a/lib/libpacman/util/flist.h +++ b/lib/libpacman/util/flist.h @@ -601,6 +601,8 @@ public: typedef flib::const_iterator<iterable, true> const_reverse_iterator; typedef size_t size_type; + typedef int (*comparator)(value_type, value_type); + FList() : FCListItem(this, this) { } @@ -735,7 +737,24 @@ public: return *this; } - bool remove(void *ptr, _pacman_fn_cmp fn, void **data) + FList &add_sorted(const value_type &data, comparator fn) + { + iterable add = new FListItem<T>(data); + + /* Find insertion point. */ + iterable previous, end; + for(previous = end = c_end(); previous->next() != end; previous = previous->next()) { + if(fn(data, previous->next()->m_data) <= 0) { + break; + } + } + + /* Insert node before insertion point. */ + add->insert_after(previous); + return *this; + } + + bool remove(void *ptr, _pacman_fn_cmp fn, value_type *data) { return remove(fn, ptr, data); } diff --git a/lib/libpacman/util/fstringlist.cpp b/lib/libpacman/util/fstringlist.cpp index 340d573..029fda5 100644 --- a/lib/libpacman/util/fstringlist.cpp +++ b/lib/libpacman/util/fstringlist.cpp @@ -142,7 +142,7 @@ FStringList::FStringList(const FStringList &o) } FStringList::FStringList(FStringList &&o) - : FPtrList(std::move(o)) + : FList(std::move(o)) { } FStringList &FStringList::operator = (const FStringList &o) @@ -162,7 +162,7 @@ FStringList &FStringList::operator = (FStringList &&o) FStringList &FStringList::add(const char *s) { - FPtrList::add(f_strdup(s)); + FList::add(f_strdup(s)); return *this; } @@ -189,7 +189,7 @@ FStringList &FStringList::vaddf(const char *fmt, va_list ap) char *dest; vasprintf(&dest, fmt, ap); - FPtrList::add(dest); + FList::add(dest); return *this; } diff --git a/lib/libpacman/util/fstringlist.h b/lib/libpacman/util/fstringlist.h index 6c83958..fbf1050 100644 --- a/lib/libpacman/util/fstringlist.h +++ b/lib/libpacman/util/fstringlist.h @@ -52,7 +52,7 @@ int f_stringlist_clear(FStringList *self); } class FStringList - : public FPtrList + : public FList<const char *> { public: FStringList(); _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
