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

Reply via email to