Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=d7560cc0feb1324fff2ef25cad5a725166031bb8

commit d7560cc0feb1324fff2ef25cad5a725166031bb8
Author: Michel Hermier <[email protected]>
Date:   Tue Aug 19 13:59:07 2014 +0200

libpacman: Use FPtrList where possible, drop __pmlist_t definition.

diff --git a/lib/libpacman/cache.cpp b/lib/libpacman/cache.cpp
index 6e3660f..9054537 100644
--- a/lib/libpacman/cache.cpp
+++ b/lib/libpacman/cache.cpp
@@ -94,7 +94,7 @@ void _pacman_db_free_pkgcache(Database *db)
_pacman_db_clear_grpcache(db);
}

-pmlist_t *_pacman_db_get_pkgcache(Database *db)
+FPtrList *_pacman_db_get_pkgcache(Database *db)
{
ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, NULL));

@@ -147,7 +147,7 @@ int _pacman_db_remove_pkgfromcache(Database *db, Package 
*pkg)
static
Group *_pacman_db_get_grpfromlist(FPtrList *list, const char *target)
{
-       pmlist_t *i;
+       FPtrList *i;

if(_pacman_strempty(target)) {
return(NULL);
@@ -168,7 +168,7 @@ Group *_pacman_db_get_grpfromlist(FPtrList *list, const 
char *target)
*/
int _pacman_db_load_grpcache(Database *db)
{
-       pmlist_t *lp;
+       FPtrList *lp;

ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));

@@ -177,7 +177,7 @@ int _pacman_db_load_grpcache(Database *db)
_pacman_log(PM_LOG_DEBUG, _("loading group cache for repository '%s'"), 
db->treename);

for(; lp; lp = f_ptrlistitem_next(lp)) {
-               pmlist_t *i;
+               FPtrList *i;
Package *pkg = f_ptrlistitem_data(lp);

if(!(pkg->flags & INFRQ_DESC)) {
@@ -216,7 +216,7 @@ int _pacman_db_clear_grpcache(Database *db)
return 0;
}

-pmlist_t *_pacman_db_get_grpcache(Database *db)
+FPtrList *_pacman_db_get_grpcache(Database *db)
{
ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, NULL));

diff --git a/lib/libpacman/cache.h b/lib/libpacman/cache.h
index 4d37504..f731e10 100644
--- a/lib/libpacman/cache.h
+++ b/lib/libpacman/cache.h
@@ -30,9 +30,9 @@ int _pacman_db_load_pkgcache(libpacman::Database *db);
void _pacman_db_free_pkgcache(libpacman::Database *db);
int _pacman_db_add_pkgincache(libpacman::Database *db, libpacman::Package *pkg);
int _pacman_db_remove_pkgfromcache(libpacman::Database *db, libpacman::Package 
*pkg);
-pmlist_t *_pacman_db_get_pkgcache(libpacman::Database *db);
+FPtrList *_pacman_db_get_pkgcache(libpacman::Database *db);
/* groups */
-pmlist_t *_pacman_db_get_grpcache(libpacman::Database *db);
+FPtrList *_pacman_db_get_grpcache(libpacman::Database *db);
libpacman::Group *_pacman_db_get_grpfromcache(libpacman::Database *db, const 
char *target);

#endif /* _PACMAN_CACHE_H */
diff --git a/lib/libpacman/conflict.cpp b/lib/libpacman/conflict.cpp
index aff6195..7b3ec5c 100644
--- a/lib/libpacman/conflict.cpp
+++ b/lib/libpacman/conflict.cpp
@@ -45,15 +45,15 @@

using namespace libpacman;

-/* Returns a pmlist_t* of pmdepmissing_t pointers.
+/* Returns a FPtrList* of pmdepmissing_t pointers.
*
* conflicts are always name only
*/
-pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t *packages)
+FPtrList *_pacman_checkconflicts(pmtrans_t *trans, FPtrList *packages)
{
Package *info = NULL;
-       pmlist_t *i, *j, *k;
-       pmlist_t *baddeps = NULL;
+       FPtrList *i, *j, *k;
+       FPtrList *baddeps = NULL;
pmdepmissing_t *miss = NULL;
int howmany, remain;
double percent;
@@ -101,7 +101,7 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t 
*packages)
baddeps = _pacman_depmisslist_add(baddeps, miss);
} else {
/* see if dp provides something in tp's conflict list */
-                                       pmlist_t *m;
+                                       FPtrList *m;
for(m = dp->provides(); m; m = f_ptrlistitem_next(m)) {
if(!strcmp(f_stringlistitem_to_str(m), conflict)) {
/* confict */
@@ -129,7 +129,7 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t 
*packages)
baddeps = _pacman_depmisslist_add(baddeps, miss);
} else {
/* see if otp provides something in tp's conflict list */
-                                       pmlist_t *m;
+                                       FPtrList *m;
for(m = otp->provides(); m; m = f_ptrlistitem_next(m)) {
if(!strcmp(f_stringlistitem_to_str(m), conflict)) {
_pacman_log(PM_LOG_DEBUG, _("targs vs targs: found %s as a conflict for %s"),
@@ -144,7 +144,7 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t 
*packages)
/* CHECK 3: check database against targets */
_pacman_log(PM_LOG_DEBUG, _("checkconflicts: db vs targ '%s'"), tp->name());
for(k = _pacman_db_get_pkgcache(db_local); k; k = f_ptrlistitem_next(k)) {
-                       pmlist_t *conflicts = NULL;
+                       FPtrList *conflicts = NULL;
int usenewconflicts = 0;

info = (Package *)f_ptrlistitem_data(k);
@@ -152,7 +152,7 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t 
*packages)
/* a package cannot conflict with itself -- that's just not nice */
continue;
}
-                       /* If this package (*info) is also in our packages 
pmlist_t, use the
+                       /* If this package (*info) is also in our packages 
FPtrList, use the
* conflicts list from the new package, not the old one (*info)
*/
for(j = packages; j; j = f_ptrlistitem_next(j)) {
@@ -175,9 +175,9 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t 
*packages)
baddeps = _pacman_depmisslist_add(baddeps, miss);
} else {
/* see if the db package conflicts with something we provide */
-                                       pmlist_t *m;
+                                       FPtrList *m;
for(m = conflicts; m; m = f_ptrlistitem_next(m)) {
-                                               pmlist_t *n;
+                                               FPtrList *n;
for(n = tp->provides(); n; n = f_ptrlistitem_next(n)) {
if(!strcmp(f_stringlistitem_to_str(m), f_stringlistitem_to_str(n))) {
_pacman_log(PM_LOG_DEBUG, _("db vs targs: found %s as a conflict for %s"),
@@ -195,14 +195,14 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, 
pmlist_t *packages)
return(baddeps);
}

-/* Returns a pmlist_t* of file conflicts.
+/* Returns a FPtrList* of file conflicts.
*  Hooray for set-intersects!
*  Pre-condition: both lists are sorted!
*/
-static pmlist_t *chk_fileconflicts(pmlist_t *filesA, pmlist_t *filesB)
+static FPtrList *chk_fileconflicts(FPtrList *filesA, FPtrList *filesB)
{
-       pmlist_t *ret = NULL;
-       pmlist_t *pA = filesA, *pB = filesB;
+       FPtrList *ret = NULL;
+       FPtrList *pA = filesA, *pB = filesB;

while(pA && pB) {
const char *strA = f_stringlistitem_to_str(pA);
@@ -232,14 +232,14 @@ static pmlist_t *chk_fileconflicts(pmlist_t *filesA, 
pmlist_t *filesB)
return(ret);
}

-pmlist_t *_pacman_db_find_conflicts(pmtrans_t *trans)
+FPtrList *_pacman_db_find_conflicts(pmtrans_t *trans)
{
-       pmlist_t *i, *j, *k;
+       FPtrList *i, *j, *k;
char *filestr = NULL;
char path[PATH_MAX+1];
struct stat buf;
-       pmlist_t *conflicts = NULL;
-       pmlist_t *targets = trans->packages;
+       FPtrList *conflicts = NULL;
+       FPtrList *targets = trans->packages;
Package *p, *dbpkg;
double percent;
int howmany, remain;
@@ -260,7 +260,7 @@ pmlist_t *_pacman_db_find_conflicts(pmtrans_t *trans)
for(j = i; j; j = f_ptrlistitem_next(j)) {
Package *p2 = (Package*)f_ptrlistitem_data(j);
if(strcmp(p1->name(), p2->name())) {
-                               pmlist_t *ret = chk_fileconflicts(p1->files(), 
p2->files());
+                               FPtrList *ret = chk_fileconflicts(p1->files(), 
p2->files());
for(k = ret; k; k = f_ptrlistitem_next(k)) {
pmconflict_t *conflict = _pacman_malloc(sizeof(pmconflict_t));
if(conflict == NULL) {
diff --git a/lib/libpacman/conflict.h b/lib/libpacman/conflict.h
index 9723f20..ab52393 100644
--- a/lib/libpacman/conflict.h
+++ b/lib/libpacman/conflict.h
@@ -33,8 +33,8 @@ struct __pmconflict_t {
char ctarget[PKG_NAME_LEN];
};

-pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t *packages);
-pmlist_t *_pacman_db_find_conflicts(pmtrans_t *trans);
+FPtrList *_pacman_checkconflicts(pmtrans_t *trans, FPtrList *packages);
+FPtrList *_pacman_db_find_conflicts(pmtrans_t *trans);

#endif /* _PACMAN_CONFLICT_H */

diff --git a/lib/libpacman/db.cpp b/lib/libpacman/db.cpp
index b2f8ed0..0561e0f 100644
--- a/lib/libpacman/db.cpp
+++ b/lib/libpacman/db.cpp
@@ -84,9 +84,9 @@ Database::~Database()
free(path);
}

-pmlist_t *Database::filter(const PackageMatcher &packagematcher)
+FPtrList *Database::filter(const PackageMatcher &packagematcher)
{
-       pmlist_t *i, *ret = NULL;
+       FPtrList *i, *ret = NULL;

for(i = _pacman_db_get_pkgcache(this); i; i = f_ptrlistitem_next(i)) {
Package *pkg = (Package *)f_ptrlistitem_data(i);
@@ -98,14 +98,14 @@ pmlist_t *Database::filter(const PackageMatcher 
&packagematcher)
return ret;
}

-pmlist_t *Database::filter(const FStrMatcher *strmatcher, int 
packagestrmatcher_flags)
+FPtrList *Database::filter(const FStrMatcher *strmatcher, int 
packagestrmatcher_flags)
{
return filter(PackageMatcher(strmatcher, packagestrmatcher_flags));
}

FPtrList *Database::filter(const FStringList *needles, int 
packagestrmatcher_flags, int strmatcher_flags)
{
-       pmlist_t *i, *j, *ret = NULL;
+       FPtrList *i, *j, *ret = NULL;

for(i = needles; i; i = f_ptrlistitem_next(i)) {
const char *pattern = f_stringlistitem_to_str(i);
@@ -139,7 +139,7 @@ FPtrList *Database::filter(const char *pattern, int 
packagestrmatcher_flags, int
Package *Database::find(const PackageMatcher &packagematcher)
{
Package *ret = NULL;
-       pmlist_t *i;
+       FPtrList *i;

for(i = _pacman_db_get_pkgcache(this); i; i = f_ptrlistitem_next(i)) {
Package *pkg = (Package *)f_ptrlistitem_data(i);
@@ -174,7 +174,7 @@ FPtrList *Database::whatPackagesProvide(const char *target)
return filter(target, PM_PACKAGE_FLAG_PROVIDES);
}

-pmlist_t *Database::test() const
+FPtrList *Database::test() const
{
/* testing sync dbs is not supported */
return f_ptrlist_new();
@@ -236,7 +236,7 @@ int Database::write(Package *info, unsigned int inforeq)
RET_ERR(PM_ERR_WRONG_ARGS, -1); // Not supported
}

-pmlist_t *Database::getowners(const char *filename)
+FPtrList *Database::getowners(const char *filename)
{
return NULL;
}
diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h
index 7f4b704..c5c61ec 100644
--- a/lib/libpacman/db.h
+++ b/lib/libpacman/db.h
@@ -51,7 +51,7 @@ public:
virtual ~Database();

/* Prototypes for backends functions */
-       virtual pmlist_t *test() const;
+       virtual FPtrList *test() const;

virtual int open(int flags = 0);
virtual int close();
@@ -67,8 +67,8 @@ public:
virtual int write(libpacman::Package *info, unsigned int inforeq);

// Cache operations
-       pmlist_t *filter(const libpacman::PackageMatcher &packagematcher);
-       pmlist_t *filter(const FStrMatcher *strmatcher, int 
packagestrmatcher_flags);
+       FPtrList *filter(const libpacman::PackageMatcher &packagematcher);
+       FPtrList *filter(const FStrMatcher *strmatcher, int 
packagestrmatcher_flags);
FPtrList *filter(const FStringList *needles, int packagestrmatcher_flags, int 
strmatcher_flags = FStrMatcher::EQUAL);
FPtrList *filter(const char *pattern, int packagestrmatcher_flags, int 
strmatcher_flags = FStrMatcher::EQUAL);
libpacman::Package *find(const libpacman::PackageMatcher &packagematcher);
@@ -78,15 +78,15 @@ public:
int strmatcher_flags = FStrMatcher::EQUAL);
FPtrList *whatPackagesProvide(const char *target);

-       virtual pmlist_t *getowners(const char *filename); /* Make pure virtual 
*/
+       virtual FPtrList *getowners(const char *filename); /* Make pure virtual 
*/

::libpacman::Handle *m_handle;
char *path;
char treename[PATH_MAX];
libpacman::Timestamp cache_timestamp;
-       pmlist_t *pkgcache;
-       pmlist_t *grpcache;
-       pmlist_t *servers;
+       FPtrList *pkgcache;
+       FPtrList *grpcache;
+       FPtrList *servers;

protected:
Database(libpacman::Handle *handle, const char *treename);
diff --git a/lib/libpacman/db/localdb.cpp b/lib/libpacman/db/localdb.cpp
index ff7661a..262ff10 100644
--- a/lib/libpacman/db/localdb.cpp
+++ b/lib/libpacman/db/localdb.cpp
@@ -134,7 +134,7 @@ int LocalPackage::remove()

int _pacman_localpackage_remove(Package *pkg, pmtrans_t *trans, int howmany, 
int remain)
{
-       pmlist_t *lp;
+       FPtrList *lp;
struct stat buf;
int position = 0;
Handle *handle = trans->m_handle;
@@ -180,7 +180,7 @@ int _pacman_localpackage_remove(Package *pkg, pmtrans_t 
*trans, int howmany, int
* see the big comment block in db_find_conflicts() for an
* explanation. */
int skipit = 0;
-                       pmlist_t *j;
+                       FPtrList *j;
for(j = trans->skiplist; j; j = f_ptrlistitem_next(j)) {
if(!strcmp(file, f_stringlistitem_to_str(j))) {
skipit = 1;
@@ -251,12 +251,12 @@ LocalPackage *_pacman_localdb_pkg_new(LocalDatabase *db, 
const struct dirent *di
return pkg;
}

-pmlist_t *LocalDatabase::test() const
+FPtrList *LocalDatabase::test() const
{
struct dirent *ent;
char path[PATH_MAX];
struct stat buf;
-       pmlist_t *ret = f_ptrlist_new();
+       FPtrList *ret = f_ptrlist_new();

while ((ent = readdir(m_dir)) != NULL) {
snprintf(path, PATH_MAX, "%s/%s", this->path, ent->d_name);
@@ -422,9 +422,9 @@ void _pacman_localdb_write_string(const char *entry, const 
char *value, FILE *st
}

static
-void _pacman_localdb_write_stringlist(const char *entry, const pmlist_t 
*values, FILE *stream)
+void _pacman_localdb_write_stringlist(const char *entry, const FPtrList 
*values, FILE *stream)
{
-       const pmlist_t *lp;
+       const FPtrList *lp;

if(values != NULL) {
fprintf(stream, "%%%s%%\n", entry);
@@ -527,12 +527,12 @@ cleanup:
return(retval);
}

-pmlist_t *LocalDatabase::getowners(const char *filename)
+FPtrList *LocalDatabase::getowners(const char *filename)
{
struct stat buf;
int gotcha = 0;
char rpath[PATH_MAX];
-       pmlist_t *lp, *ret = NULL;
+       FPtrList *lp, *ret = NULL;

if(stat(filename, &buf) == -1 || realpath(filename, rpath) == NULL) {
RET_ERR(PM_ERR_PKG_OPEN, NULL);
@@ -547,7 +547,7 @@ pmlist_t *LocalDatabase::getowners(const char *filename)

for(lp = _pacman_db_get_pkgcache(this); lp; lp = f_ptrlistitem_next(lp)) {
Package *info = (Package *)f_ptrlistitem_data(lp);
-               pmlist_t *i;
+               FPtrList *i;

for(i = info->files(); i; i = f_ptrlistitem_next(i)) {
char path[PATH_MAX];
diff --git a/lib/libpacman/db/localdb.h b/lib/libpacman/db/localdb.h
index 6536125..847798c 100644
--- a/lib/libpacman/db/localdb.h
+++ b/lib/libpacman/db/localdb.h
@@ -51,7 +51,7 @@ public:
LocalDatabase(libpacman::Handle *handle, const char *treename);
virtual ~LocalDatabase();

-       virtual pmlist_t *test() const;
+       virtual FPtrList *test() const;

virtual int close();

@@ -61,7 +61,7 @@ public:

virtual int write(libpacman::Package *info, unsigned int inforeq);

-       virtual pmlist_t *getowners(const char *filename);
+       virtual FPtrList *getowners(const char *filename);

protected:
virtual int open(int flags, libpacman::Timestamp *timestamp);
diff --git a/lib/libpacman/db/localdb_files.cpp 
b/lib/libpacman/db/localdb_files.cpp
index 5620782..daafd73 100644
--- a/lib/libpacman/db/localdb_files.cpp
+++ b/lib/libpacman/db/localdb_files.cpp
@@ -65,7 +65,7 @@ int _pacman_localdb_desc_fread(Package *info, FILE *fp)
{
char line[512];
int sline = sizeof(line)-1;
-       pmlist_t *i;
+       FPtrList *i;
Handle *handle = info->database()->m_handle;

while(!feof(fp)) {
diff --git a/lib/libpacman/db/syncdb.cpp b/lib/libpacman/db/syncdb.cpp
index 2acf022..1b3c894 100644
--- a/lib/libpacman/db/syncdb.cpp
+++ b/lib/libpacman/db/syncdb.cpp
@@ -152,7 +152,7 @@ SyncPackage *_pacman_syncdb_pkg_new(SyncDatabase *db, const 
struct archive_entry
int _pacman_syncdb_update(Database *db, int force)
{
char path[PATH_MAX], dirpath[PATH_MAX];
-       pmlist_t *files = NULL;
+       FPtrList *files = NULL;
Timestamp newmtime;
Timestamp timestamp;
int ret, updated=0;
diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp
index fed975b..e2b0bc6 100644
--- a/lib/libpacman/deps.cpp
+++ b/lib/libpacman/deps.cpp
@@ -75,9 +75,9 @@ __pmdepmissing_t::__pmdepmissing_t(const char *target, 
unsigned char type, unsig
}

static
-int _pacman_depmiss_isin(pmdepmissing_t *needle, pmlist_t *haystack)
+int _pacman_depmiss_isin(pmdepmissing_t *needle, FPtrList *haystack)
{
-       pmlist_t *i;
+       FPtrList *i;

for(i = haystack; i; i = f_ptrlistitem_next(i)) {
pmdepmissing_t *miss = f_ptrlistitem_data(i);
@@ -89,7 +89,7 @@ int _pacman_depmiss_isin(pmdepmissing_t *needle, pmlist_t 
*haystack)
return(0);
}

-pmlist_t *_pacman_depmisslist_add(pmlist_t *misslist, pmdepmissing_t *miss)
+FPtrList *_pacman_depmisslist_add(FPtrList *misslist, pmdepmissing_t *miss)
{
if(!_pacman_depmiss_isin(miss, misslist)) {
misslist = f_ptrlist_add(misslist, miss);
@@ -111,15 +111,15 @@ pmlist_t *_pacman_depmisslist_add(pmlist_t *misslist, 
pmdepmissing_t *miss)
* mode should be either PM_TRANS_TYPE_ADD or PM_TRANS_TYPE_REMOVE.  This
* affects the dependency order sortbydeps() will use.
*
- * This function returns the new pmlist_t* target list.
+ * This function returns the new FPtrList* target list.
*
*/
-pmlist_t *_pacman_sortbydeps(pmlist_t *targets, int mode)
+FPtrList *_pacman_sortbydeps(FPtrList *targets, int mode)
{
-       pmlist_t *newtargs = NULL;
-       pmlist_t *i, *j, *k;
-       pmlist_t *vertices = NULL;
-       pmlist_t *vptr;
+       FPtrList *newtargs = NULL;
+       FPtrList *i, *j, *k;
+       FPtrList *vertices = NULL;
+       FPtrList *vptr;
pmgraph_t *vertex;
int found;

@@ -193,7 +193,7 @@ pmlist_t *_pacman_sortbydeps(pmlist_t *targets, int mode)

if(mode == PM_TRANS_TYPE_REMOVE) {
/* we're removing packages, so reverse the order */
-               pmlist_t *tmptargs = _pacman_list_reverse(newtargs);
+               FPtrList *tmptargs = _pacman_list_reverse(newtargs);
/* free the old one */
FREELISTPTR(newtargs);
newtargs = tmptargs;
@@ -204,18 +204,18 @@ pmlist_t *_pacman_sortbydeps(pmlist_t *targets, int mode)
return(newtargs);
}

-/* Returns a pmlist_t* of missing_t pointers.
+/* Returns a FPtrList* of missing_t pointers.
*
* dependencies can include versions with depmod operators.
*
*/
-pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t 
*packages)
+FPtrList *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, FPtrList 
*packages)
{
pmdepend_t depend;
-       pmlist_t *i, *j, *k;
+       FPtrList *i, *j, *k;
int cmp;
int found = 0;
-       pmlist_t *baddeps = NULL;
+       FPtrList *baddeps = NULL;
pmdepmissing_t *miss = NULL;
Database *db_local = trans->m_handle->db_local;

@@ -335,7 +335,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
}
/* check database for provides matches */
if(!found) {
-                                       pmlist_t *m;
+                                       FPtrList *m;
k = db_local->whatPackagesProvide(depend.name);
for(m = k; m && !found; m = f_ptrlistitem_next(m)) {
/* look for a match that isn't one of the packages we're trying
@@ -343,7 +343,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
* package, we'll defer to the NEW one, not the one already
* installed. */
Package *p = f_ptrlistitem_data(m);
-                                               pmlist_t *n;
+                                               FPtrList *n;
int skip = 0;
for(n = packages; n && !skip; n = f_ptrlistitem_next(n)) {
Package *ptp = f_ptrlistitem_data(n);
@@ -474,15 +474,15 @@ out:
return(0);
}

-/* return a new pmlist_t target list containing all packages in the original
+/* return a new FPtrList target list containing all packages in the original
* target list, as well as all their un-needed dependencies.  By un-needed,
* I mean dependencies that are *only* required for packages in the target
* list, so they can be safely removed.  This function is recursive.
*/
-pmlist_t *_pacman_removedeps(Database *db, pmlist_t *targs)
+FPtrList *_pacman_removedeps(Database *db, FPtrList *targs)
{
-       pmlist_t *i, *j, *k;
-       pmlist_t *newtargs = targs;
+       FPtrList *i, *j, *k;
+       FPtrList *newtargs = targs;

if(db == NULL) {
return(newtargs);
@@ -554,14 +554,14 @@ pmlist_t *_pacman_removedeps(Database *db, pmlist_t 
*targs)
*
* make sure *list and *trail are already initialized
*/
-int _pacman_resolvedeps(pmtrans_t *trans, Package *syncpkg, pmlist_t *list,
-                      pmlist_t *trail, pmlist_t **data)
+int _pacman_resolvedeps(pmtrans_t *trans, Package *syncpkg, FPtrList *list,
+                      FPtrList *trail, FPtrList **data)
{
-       pmlist_t *i, *j;
-       pmlist_t *targ;
-       pmlist_t *deps = NULL;
+       FPtrList *i, *j;
+       FPtrList *targ;
+       FPtrList *deps = NULL;
Handle *handle = trans->m_handle;
-       pmlist_t *dbs_sync = handle->dbs_sync;
+       FPtrList *dbs_sync = handle->dbs_sync;

if(dbs_sync == NULL || syncpkg == NULL) {
return(-1);
@@ -600,7 +600,7 @@ int _pacman_resolvedeps(pmtrans_t *trans, Package *syncpkg, 
pmlist_t *list,
}
/* check provides */
for(j = dbs_sync; !ps && j; j = f_ptrlistitem_next(j)) {
-                       pmlist_t *provides;
+                       FPtrList *provides;
provides = ((Database 
*)f_ptrlistitem_data(j))->whatPackagesProvide(miss->depend.name);
if(provides) {
ps = f_ptrlistitem_data(provides);
@@ -727,8 +727,8 @@ static int str_cmp(const void *s1, const void *s2)
return(strcmp(s1, s2));
}

-int inList(pmlist_t *lst, char *lItem) {
-    pmlist_t *ll;
+int inList(FPtrList *lst, char *lItem) {
+    FPtrList *ll;
ll = lst;
while(ll) {
if(!strcmp(lItem, (char *)f_ptrlistitem_data(ll))) {
@@ -740,9 +740,9 @@ int inList(pmlist_t *lst, char *lItem) {
}

extern "C" {
-int pacman_output_generate(pmlist_t *targets, pmlist_t *dblist) {
-    pmlist_t *found = NULL;
-    pmlist_t *k = NULL, *j = NULL;
+int pacman_output_generate(FPtrList *targets, FPtrList *dblist) {
+    FPtrList *found = NULL;
+    FPtrList *k = NULL, *j = NULL;
Package *pkg = NULL;
char *match = NULL;
int foundMatch = 0;
diff --git a/lib/libpacman/deps.h b/lib/libpacman/deps.h
index 62db51d..33d0bf0 100644
--- a/lib/libpacman/deps.h
+++ b/lib/libpacman/deps.h
@@ -45,18 +45,18 @@ typedef struct __pmgraph_t {
int state; /* 0: untouched, -1: entered, other: leaving time */
void *data;
struct __pmgraph_t *parent; /* where did we come from? */
-       pmlist_t *children;
-       pmlist_t *childptr; /* points to a child in children list */
+       FPtrList *children;
+       FPtrList *childptr; /* points to a child in children list */
} pmgraph_t;

-pmlist_t *_pacman_depmisslist_add(pmlist_t *misslist, pmdepmissing_t *miss);
+FPtrList *_pacman_depmisslist_add(FPtrList *misslist, pmdepmissing_t *miss);

-pmlist_t *_pacman_sortbydeps(pmlist_t *targets, int mode);
-pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t 
*packages);
+FPtrList *_pacman_sortbydeps(FPtrList *targets, int mode);
+FPtrList *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, FPtrList 
*packages);
int _pacman_splitdep(char *depstr, pmdepend_t *depend);
-pmlist_t *_pacman_removedeps(libpacman::Database *db, pmlist_t *targs);
-int _pacman_resolvedeps(pmtrans_t *trans, libpacman::Package *syncpkg, 
pmlist_t *list,
-                pmlist_t *trail, pmlist_t **data);
+FPtrList *_pacman_removedeps(libpacman::Database *db, FPtrList *targs);
+int _pacman_resolvedeps(pmtrans_t *trans, libpacman::Package *syncpkg, 
FPtrList *list,
+                FPtrList *trail, FPtrList **data);
int _pacman_depcmp(libpacman::Package *pkg, pmdepend_t *dep);

#endif /* _PACMAN_DEPS_H */
diff --git a/lib/libpacman/group.h b/lib/libpacman/group.h
index 34cf8b3..e617ab0 100644
--- a/lib/libpacman/group.h
+++ b/lib/libpacman/group.h
@@ -24,6 +24,7 @@
#include "pacman.h"

#include "kernel/fobject.h"
+#include "util/fptrlist.h"

#define GRP_NAME_LEN 256

@@ -38,7 +39,7 @@ public:
~Group();

char name[GRP_NAME_LEN];
-       pmlist_t *packages; /* List of unowned strings */
+       FPtrList *packages; /* List of unowned strings */
};

}
diff --git a/lib/libpacman/handle.cpp b/lib/libpacman/handle.cpp
index 82a63d2..ffa2479 100644
--- a/lib/libpacman/handle.cpp
+++ b/lib/libpacman/handle.cpp
@@ -169,7 +169,7 @@ Database *Handle::createDatabase(const char *treename, 
pacman_cb_db_register cal

Database *Handle::getDatabase(const char *treename)
{
-       pmlist_t *i;
+       FPtrList *i;

if(strcmp(treename, "local") == 0) {
return db_local;
diff --git a/lib/libpacman/handle.h b/lib/libpacman/handle.h
index f991d4e..268629a 100644
--- a/lib/libpacman/handle.h
+++ b/lib/libpacman/handle.h
@@ -31,6 +31,7 @@
#include "trans.h"

#include "kernel/fobject.h"
+#include "util/fptrlist.h"

namespace libpacman {

@@ -61,7 +62,7 @@ public:
pmaccess_t access;
uid_t uid;
libpacman::Database *db_local;
-       pmlist_t *dbs_sync; /* List of (libpacman::Database *) */
+       FPtrList *dbs_sync; /* List of (libpacman::Database *) */
FILE *logfd;
FFileLock *filelock;
pmtrans_t *trans;
@@ -72,10 +73,10 @@ public:
char *logfile;
char *hooksdir;
char *triggersdir;
-       pmlist_t *noupgrade; /* List of strings */
-       pmlist_t *noextract; /* List of strings */
-       pmlist_t *ignorepkg; /* List of strings */
-       pmlist_t *holdpkg; /* List of strings */
+       FPtrList *noupgrade; /* List of strings */
+       FPtrList *noextract; /* List of strings */
+       FPtrList *ignorepkg; /* List of strings */
+       FPtrList *holdpkg; /* List of strings */
unsigned char usesyslog;
time_t upgradedelay;
time_t olddelay;
@@ -86,7 +87,7 @@ public:
unsigned short nopassiveftp;
unsigned short chomp; /* if eye-candy features should be enabled or not */
unsigned short maxtries; /* for downloading */
-       pmlist_t *needles; /* for searching */
+       FPtrList *needles; /* for searching */
char *language;
int *dlremain;
int *dlhowmany;
diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp
index c4def29..14f04e8 100644
--- a/lib/libpacman/package.cpp
+++ b/lib/libpacman/package.cpp
@@ -156,12 +156,12 @@ pkg_error:
return false;
}

-/* Test for existence of a package in a pmlist_t*
+/* Test for existence of a package in a FPtrList*
* of Package*
*/
-Package *_pacman_pkg_isin(const char *needle, pmlist_t *haystack)
+Package *_pacman_pkg_isin(const char *needle, FPtrList *haystack)
{
-       pmlist_t *lp;
+       FPtrList *lp;

if(needle == NULL || haystack == NULL) {
return(NULL);
@@ -252,7 +252,7 @@ int Package::filename(char *str, size_t size) const
*/
char *Package::fileneedbackup(const char *file) const
{
-       const pmlist_t *lp;
+       const FPtrList *lp;

ASSERT(!_pacman_strempty(file), RET_ERR(PM_ERR_WRONG_ARGS, NULL));

diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h
index 5e7e3c7..d46c3b8 100644
--- a/lib/libpacman/package.h
+++ b/lib/libpacman/package.h
@@ -191,7 +191,7 @@ private:
int _pacman_pkg_delete(libpacman::Package *self);

int _pacman_pkg_cmp(const void *p1, const void *p2);
-libpacman::Package *_pacman_pkg_isin(const char *needle, pmlist_t *haystack);
+libpacman::Package *_pacman_pkg_isin(const char *needle, FPtrList *haystack);

#endif /* _PACMAN_PACKAGE_H */

diff --git a/lib/libpacman/package/packagecache.cpp 
b/lib/libpacman/package/packagecache.cpp
index 518cc1b..c89ba8c 100644
--- a/lib/libpacman/package/packagecache.cpp
+++ b/lib/libpacman/package/packagecache.cpp
@@ -42,9 +42,9 @@ int _pacman_packagecache_clean(int level)
/* incomplete cleanup: we keep latest packages and partial downloads */
DIR *dir;
struct dirent *ent;
-               pmlist_t *cache = NULL;
-               pmlist_t *clean = NULL;
-               pmlist_t *i, *j;
+               FPtrList *cache = NULL;
+               FPtrList *clean = NULL;
+               FPtrList *i, *j;

dir = opendir(dirpath);
if(dir == NULL) {
diff --git a/lib/libpacman/packages_transaction.cpp 
b/lib/libpacman/packages_transaction.cpp
index f83d231..4f2306a 100644
--- a/lib/libpacman/packages_transaction.cpp
+++ b/lib/libpacman/packages_transaction.cpp
@@ -43,7 +43,7 @@ static int
_pacman_packages_transaction_set_state(pmtrans_t *trans, int new_state)
{
const char *root, *triggersdir, *trigger_function;
-       const pmlist_t *lp;
+       const FPtrList *lp;

triggersdir = trans->m_handle->triggersdir;
root = trans->m_handle->root;
diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp
index d58468e..7e9a45e 100644
--- a/lib/libpacman/pacman.cpp
+++ b/lib/libpacman/pacman.cpp
@@ -172,7 +172,7 @@ void _pacman_handle_set_option_string(const char *option, 
char **string, const c
}

static
-void _pacman_handle_set_option_stringlist(const char *option, pmlist_t 
**stringlist, const char *value)
+void _pacman_handle_set_option_stringlist(const char *option, FStringList 
**stringlist, const char *value)
{
if(!_pacman_strempty(value)) {
*stringlist = _pacman_stringlist_append(*stringlist, value);
@@ -509,7 +509,7 @@ int pacman_db_setserver(pmdb_t *_db, char *url)
found = 1;
}
} else {
-               pmlist_t *i;
+               FPtrList *i;
for(i = handle->dbs_sync; i && !found; i = f_ptrlistitem_next(i)) {
Database *sdb = f_ptrlistitem_data(i);
if(strcmp(db->treename, sdb->treename) == 0) {
@@ -600,7 +600,7 @@ pmlist_t *pacman_db_getpkgcache(pmdb_t *_db)
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));

-       return(_pacman_db_get_pkgcache(db));
+       return c_cast(_pacman_db_get_pkgcache(db));
}

/** Get the list of packages that a package provides
@@ -617,7 +617,7 @@ pmlist_t *pacman_db_whatprovides(pmdb_t *_db, char *name)
ASSERT(db != NULL, return(NULL));
ASSERT(!_pacman_strempty(name), return(NULL));

-       return db->whatPackagesProvide(name);
+       return c_cast(db->whatPackagesProvide(name));
}

/** Get a group entry from a package database
@@ -650,7 +650,7 @@ pmlist_t *pacman_db_getgrpcache(pmdb_t *_db)
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));

-       return(_pacman_db_get_grpcache(db));
+       return c_cast(_pacman_db_get_grpcache(db));
}

/** @} */
@@ -872,7 +872,7 @@ pmlist_t *pacman_pkg_getowners(const char *filename)
ASSERT(handle->db_local != NULL, RET_ERR(PM_ERR_DB_NULL, NULL));
ASSERT(!_pacman_strempty(filename), RET_ERR(PM_ERR_WRONG_ARGS, NULL));

-       return handle->db_local->getowners(filename);
+       return c_cast(handle->db_local->getowners(filename));
}

/** Create a package from a file.
@@ -1010,7 +1010,7 @@ pmlist_t *pacman_db_test(pmdb_t *_db)
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));

-       return db->test();
+       return c_cast(db->test());
}

/** Searches a database
@@ -1020,7 +1020,7 @@ pmlist_t *pacman_db_test(pmdb_t *_db)
pmlist_t *pacman_db_search(pmdb_t *_db)
{
Database *db = cxx_cast(_db);
-       pmlist_t *ret;
+       FPtrList *ret;

/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
@@ -1032,7 +1032,7 @@ pmlist_t *pacman_db_search(pmdb_t *_db)
PM_PACKAGE_FLAG_NAME | PM_PACKAGE_FLAG_DESCRIPTION | PM_PACKAGE_FLAG_PROVIDES,
FStrMatcher::ALL_IGNORE_CASE);
FREELIST(handle->needles);
-       return(ret);
+       return c_cast(ret);
}
/** @} */

@@ -1150,7 +1150,7 @@ int pacman_trans_prepare(pmlist_t **data)
ASSERT(handle->trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
ASSERT(handle->trans->state == STATE_INITIALIZED, 
RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1));

-       return handle->trans->prepare(data);
+       return handle->trans->prepare((FPtrList **)data);
}

/** Commit a transaction.
@@ -1170,7 +1170,7 @@ int pacman_trans_commit(pmlist_t **data)
ASSERT((handle->access == PM_ACCESS_RW) || (handle->trans->flags & 
PM_TRANS_FLAG_PRINTURIS),
RET_ERR(PM_ERR_BADPERMS, -1));

-       return handle->trans->commit(data);
+       return handle->trans->commit((FPtrList **)data);
}

/** Release a transaction.
@@ -1304,7 +1304,7 @@ int pacman_logaction(const char *format, ...)
*/
pmlist_iterator_t *pacman_list_begin(pmlist_t *list)
{
-       return c_cast(list);
+       return (pmlist_iterator_t *)f_ptrlist_first(cxx_cast(list));
}

/** Get the iterator to end of a list.
@@ -1313,7 +1313,7 @@ pmlist_iterator_t *pacman_list_begin(pmlist_t *list)
*/
pmlist_iterator_t *pacman_list_end(pmlist_t *list)
{
-       return NULL;
+       return (pmlist_iterator_t *)f_ptrlist_end(cxx_cast(list));
}

/** Free a list.
@@ -1324,7 +1324,8 @@ int pacman_list_free(pmlist_t *list)
{
ASSERT(list != NULL, return(-1));

-       FREELIST(list);
+       FPtrList *tmp = cxx_cast(list);
+       FREELIST(tmp);

return(0);
}
@@ -1337,7 +1338,7 @@ int pacman_list_count(pmlist_t *list)
{
ASSERT(list != NULL, return(-1));

-       return(f_ptrlist_count(list));
+       return f_ptrlist_count(cxx_cast(list));
}

/** Free a list iterator.
@@ -1359,7 +1360,7 @@ pmlist_iterator_t 
*pacman_list_iterator_next(pmlist_iterator_t *iterator)
{
ASSERT(iterator != NULL, return NULL);

-       return c_cast(f_ptrlistitem_next(cxx_cast(iterator)));
+       return (pmlist_iterator_t *)f_ptrlistitem_next((FPtrListItem 
*)iterator);
}

/** Get the data of a list iterator.
@@ -1370,7 +1371,7 @@ void *pacman_list_iterator_getdata(pmlist_iterator_t 
*iterator)
{
ASSERT(iterator != NULL, return NULL);

-       return f_ptrlistitem_data(cxx_cast(iterator));
+       return f_ptrlistitem_data((FPtrListItem *)iterator);
}
/** @} */

diff --git a/lib/libpacman/pacman_p.h b/lib/libpacman/pacman_p.h
index 4656348..611e1d9 100644
--- a/lib/libpacman/pacman_p.h
+++ b/lib/libpacman/pacman_p.h
@@ -23,6 +23,8 @@

#include "pacman.h"

+#include "util/fptrlist.h"
+
#define DEFINE_CAST(c_type, cxx_type)         \
static inline c_type *c_cast(cxx_type *obj)   \
{ return (c_type *)obj; }                     \
@@ -40,10 +42,12 @@ class Package;
}

DEFINE_CAST(struct __pmdb_t, libpacman::Database)
-DEFINE_CAST(struct __pmlist_iterator_t, struct __pmlist_t)
DEFINE_CAST(struct __pmgrp_t, libpacman::Group)
DEFINE_CAST(struct __pmhandle_t, libpacman::Handle)
+DEFINE_CAST(struct __pmlist_t, FPtrList)
+//DEFINE_CAST(struct __pmlist_iterator_t, FPtrListItem)
DEFINE_CAST(struct __pmpkg_t, libpacman::Package)
+//DEFINE_CAST(struct __pmtrans_t, libpacman::Transaction)

#undef DEFINE_CAST

diff --git a/lib/libpacman/server.cpp b/lib/libpacman/server.cpp
index 4eb43d3..a47b1d4 100644
--- a/lib/libpacman/server.cpp
+++ b/lib/libpacman/server.cpp
@@ -343,7 +343,7 @@ error:
*
* RETURN:  0 for successful download, -1 on error
*/
-int _pacman_downloadfiles(Handle *handle, pmlist_t *servers, const char 
*localpath, pmlist_t *files, int skip)
+int _pacman_downloadfiles(Handle *handle, FPtrList *servers, const char 
*localpath, FPtrList *files, int skip)
{
if(_pacman_downloadfiles_forreal(handle, servers, localpath, files, NULL, NULL, 
skip) != 0) {
return(-1);
@@ -365,13 +365,13 @@ int _pacman_downloadfiles(Handle *handle, pmlist_t 
*servers, const char *localpa
*          1 if the mtimes are identical
*         -1 on error
*/
-int _pacman_downloadfiles_forreal(Handle *handle, pmlist_t *servers, const 
char *localpath,
-       pmlist_t *files, const Timestamp *mtime1, Timestamp *mtime2, int skip)
+int _pacman_downloadfiles_forreal(Handle *handle, FPtrList *servers, const 
char *localpath,
+       FPtrList *files, const Timestamp *mtime1, Timestamp *mtime2, int skip)
{
-       pmlist_t *lp;
+       FPtrList *lp;
int done = 0;
-       pmlist_t *complete = NULL;
-       pmlist_t *i;
+       FPtrList *complete = NULL;
+       FPtrList *i;
pmserver_t *server;
int *remain = handle->dlremain, *howmany = handle->dlhowmany;

@@ -628,8 +628,8 @@ char *_pacman_fetch_pkgurl(Handle *handle, char *target)
_pacman_log(PM_LOG_DEBUG, _("%s is already in the cache\n"), fn);
} else {
pmserver_t *server;
-               pmlist_t *servers = NULL;
-               pmlist_t *files;
+               FPtrList *servers = NULL;
+               FPtrList *files;

if((server = _pacman_malloc(sizeof(pmserver_t))) == NULL) {
return(NULL);
diff --git a/lib/libpacman/server.h b/lib/libpacman/server.h
index aa3a6bc..1f37534 100644
--- a/lib/libpacman/server.h
+++ b/lib/libpacman/server.h
@@ -49,9 +49,9 @@ struct __pmdownload_t {

pmserver_t *_pacman_server_new(char *url);
void _pacman_server_free(void *data);
-int _pacman_downloadfiles(::libpacman::Handle *handle, pmlist_t *servers, 
const char *localpath, pmlist_t *files, int skip);
-int _pacman_downloadfiles_forreal(::libpacman::Handle *handle, pmlist_t 
*servers, const char *localpath,
-       pmlist_t *files, const libpacman::Timestamp *mtime1, 
libpacman::Timestamp *mtime2, int skip);
+int _pacman_downloadfiles(::libpacman::Handle *handle, FPtrList *servers, 
const char *localpath, FPtrList *files, int skip);
+int _pacman_downloadfiles_forreal(::libpacman::Handle *handle, FPtrList 
*servers, const char *localpath,
+       FPtrList *files, const libpacman::Timestamp *mtime1, 
libpacman::Timestamp *mtime2, int skip);

char *_pacman_fetch_pkgurl(::libpacman::Handle *handle, char *target);

diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp
index 745fb9d..480f4b7 100644
--- a/lib/libpacman/trans.cpp
+++ b/lib/libpacman/trans.cpp
@@ -130,7 +130,7 @@ __pmtrans_t::~__pmtrans_t()
static
int _pacman_trans_compute_triggers(pmtrans_t *trans)
{
-       pmlist_t *lp;
+       FPtrList *lp;

/* NOTE: Not the most efficient way, but will do until we add some string hash. 
*/
for(lp = trans->packages; lp; lp = f_ptrlistitem_next(lp)) {
@@ -192,12 +192,12 @@ int _pacman_trans_event(pmtrans_t *trans, unsigned char 
event, void *data1, void
return 0;
}

-/* Test for existence of a package in a pmlist_t* of pmsyncpkg_t*
+/* Test for existence of a package in a FPtrList* of pmsyncpkg_t*
* If found, return a pointer to the respective pmsyncpkg_t*
*/
pmsyncpkg_t *__pmtrans_t::find(const char *pkgname) const
{
-       pmlist_t *i;
+       FPtrList *i;

for(i = syncpkgs; i != NULL ; i = f_ptrlistitem_next(i)) {
pmsyncpkg_t *ps = f_ptrlistitem_data(i);
@@ -244,7 +244,7 @@ static int pkg_cmp(const void *p1, const void *p2)

static int check_olddelay(Handle *handle)
{
-       pmlist_t *i;
+       FPtrList *i;
Timestamp tm;

if(!handle->olddelay) {
@@ -304,10 +304,10 @@ Package *_pacman_filedb_load(Database *db, const char 
*name)
// FIXME: Make returning a pmsyncpkg_t in the future
int __pmtrans_t::add(const char *target, pmtranstype_t type, int flags)
{
-       pmlist_t *i;
+       FPtrList *i;
Package *pkg_new, *pkg_local, *pkg_queued = NULL;
Database *db_local;
-       pmlist_t *dbs_sync = m_handle->dbs_sync;
+       FPtrList *dbs_sync = m_handle->dbs_sync;

/* Sanity checks */
ASSERT((db_local = m_handle->db_local) != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
@@ -335,7 +335,7 @@ int __pmtrans_t::add(const char *target, pmtranstype_t 
type, int flags)
spkg = dbs->find(targ);
if(spkg == NULL) {
/* Search provides */
-                                       pmlist_t *p;
+                                       FPtrList *p;
_pacman_log(PM_LOG_FLOW2, _("target '%s' not found -- looking for provisions"), 
targ);
p = dbs->whatPackagesProvide(targ);
if(p != NULL) {
@@ -358,7 +358,7 @@ int __pmtrans_t::add(const char *target, pmtranstype_t 
type, int flags)
_pacman_log(PM_LOG_FLOW2, _("target '%s' not found -- looking for provisions"), 
targ);
for(i = dbs_sync; i && !spkg; i = f_ptrlistitem_next(i)) {
Database *dbs = f_ptrlistitem_data(i);
-                               pmlist_t *p = dbs->whatPackagesProvide(targ);
+                               FPtrList *p = dbs->whatPackagesProvide(targ);
if(p != NULL) {
spkg = f_ptrlistitem_data(p);
_pacman_log(PM_LOG_DEBUG, _("found '%s' as a provision for '%s'"), 
spkg->name(), targ);
@@ -493,15 +493,15 @@ error:
return(-1);
}

-int __pmtrans_t::prepare(pmlist_t **data)
+int __pmtrans_t::prepare(FPtrList **data)
{
Database *db_local;
-       pmlist_t *lp;
-       pmlist_t *deps = NULL;
-       pmlist_t *list = NULL; /* list allowing checkdeps usage with data from 
packages */
-       pmlist_t *trail = NULL; /* breadcrum list to avoid running into circles 
*/
-       pmlist_t *asked = NULL;
-       pmlist_t *i, *j, *k, *l, *m;
+       FPtrList *lp;
+       FPtrList *deps = NULL;
+       FPtrList *list = NULL; /* list allowing checkdeps usage with data from 
packages */
+       FPtrList *trail = NULL; /* breadcrum list to avoid running into circles 
*/
+       FPtrList *asked = NULL;
+       FPtrList *i, *j, *k, *l, *m;
int ret = 0;

/* Sanity checks */
@@ -814,13 +814,13 @@ int __pmtrans_t::prepare(pmlist_t **data)
/* Look through the upset package's dependencies and try to match one up
* to a provisio from the package we want to remove */
for(k = conflictp->depends(); k && !pfound; k = f_ptrlistitem_next(k)) {
-                                                       pmlist_t *m;
+                                                       FPtrList *m;
for(m = leavingp->provides(); m && !pfound; m = f_ptrlistitem_next(m)) {
if(!strcmp(f_stringlistitem_to_str(k), f_stringlistitem_to_str(m))) {
/* Found a match -- now look through final for a package that
* provides the same thing.  If none are found, then it truly
* is an unresolvable conflict. */
-                                                                       
pmlist_t *n, *o;
+                                                                       
FPtrList *n, *o;
for(n = syncpkgs; n && !pfound; n = f_ptrlistitem_next(n)) {
pmsyncpkg_t *sp = f_ptrlistitem_data(n);
for(o = sp->pkg_new->provides(); o && !pfound; o = f_ptrlistitem_next(o)) {
@@ -865,7 +865,7 @@ int __pmtrans_t::prepare(pmlist_t **data)
#ifndef __sun__
/* check for free space only in case the packages will be extracted */
if(!(flags & PM_TRANS_FLAG_NOCONFLICTS)) {
-               if(_pacman_check_freespace(this, data) == -1) {
+               if(_pacman_check_freespace(this, (pmlist_t **)data) == -1) {
/* pm_errno is set by check_freespace */
ret = -1;
goto cleanup;
@@ -897,7 +897,7 @@ cleanup:
if(lp != NULL) {
if((m_type == PM_TRANS_TYPE_REMOVE) && (flags & PM_TRANS_FLAG_CASCADE)) {
while(lp) {
-                                       pmlist_t *i;
+                                       FPtrList *i;
for(i = lp; i; i = f_ptrlistitem_next(i)) {
pmdepmissing_t *miss = (pmdepmissing_t *)f_ptrlistitem_data(i);
Package *pkg_local = db_local->scan(miss->depend.name, INFRQ_ALL);
@@ -967,7 +967,7 @@ cleanup:
_pacman_log(PM_LOG_FLOW1, _("cleaning up"));
for (lp = packages; lp!=NULL; lp = f_ptrlistitem_next(lp)) {
Package *pkg_new = (Package *)f_ptrlistitem_data(lp);
-               pmlist_t *rmlist;
+               FPtrList *rmlist;

for (rmlist=pkg_new->removes(); rmlist!=NULL; rmlist = 
f_ptrlistitem_next(rmlist)) {
char rm_fname[PATH_MAX];
@@ -997,7 +997,7 @@ cleanup:
}

#ifndef __sun__
-       if(_pacman_check_freespace(this, data) == -1) {
+       if(_pacman_check_freespace(this, (pmlist_t **)data) == -1) {
/* pm_errno is set by check_freespace */
return(-1);
}
@@ -1019,7 +1019,7 @@ int _pacman_fpmpackage_install(Package *pkg, 
pmtranstype_t type, pmtrans_t *tran
struct archive_entry *entry;
Handle *handle = trans->m_handle;
Database *db_local = handle->db_local;
-       pmlist_t *lp;
+       FPtrList *lp;
char expath[PATH_MAX], cwd[PATH_MAX] = "";

ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
@@ -1313,7 +1313,7 @@ int _pacman_fpmpackage_install(Package *pkg, 
pmtranstype_t type, pmtrans_t *tran
}

static
-int _pacman_cachedpkg_check_integrity(Package *spkg, __pmtrans_t *trans, 
pmlist_t **data)
+int _pacman_cachedpkg_check_integrity(Package *spkg, __pmtrans_t *trans, 
FPtrList **data)
{
char str[PATH_MAX], pkgname[PATH_MAX];
char *md5sum1, *md5sum2, *sha1sum1, *sha1sum2;
@@ -1412,11 +1412,11 @@ struct trans_event_table_item {
}
};

-int __pmtrans_t::commit(pmlist_t **data)
+int __pmtrans_t::commit(FPtrList **data)
{
Database *db_local;
int howmany, remain;
-       pmlist_t *targ, *lp;
+       FPtrList *targ, *lp;
pmtrans_t *tr = NULL;
char pm_install[PATH_MAX];

@@ -1434,7 +1434,7 @@ int __pmtrans_t::commit(pmlist_t **data)
_pacman_trans_set_state(this, STATE_COMMITING);

if(m_type == PM_TRANS_TYPE_SYNC) {
-       pmlist_t *i, *j, *files = NULL;
+       FPtrList *i, *j, *files = NULL;
char ldir[PATH_MAX];
int retval = 0, tries = 0;
int varcache = 1;
@@ -1540,7 +1540,7 @@ int __pmtrans_t::commit(pmlist_t **data)
}
if(!retval) {
state = STATE_COMMITING;
-               pmlist_t *i, *j;
+               FPtrList *i, *j;
int replaces = 0;

if(m_handle->sysupgrade) {
@@ -1632,13 +1632,13 @@ int __pmtrans_t::commit(pmlist_t **data)
if(ps->type == PM_SYNC_TYPE_REPLACE) {
Package *pkg_new = db_local->find(ps->pkg_name);
for(j = ps->data; j; j = f_ptrlistitem_next(j)) {
-                                       pmlist_t *k;
+                                       FPtrList *k;
Package *old = f_ptrlistitem_data(j);
/* merge lists */
for(k = old->requiredby(); k; k = f_ptrlistitem_next(k)) {
if(!_pacman_list_is_strin(f_stringlistitem_to_str(k), pkg_new->requiredby())) {
/* replace old's name with new's name in the requiredby's dependency list */
-                                                       pmlist_t *m;
+                                                       FPtrList *m;
Package *depender = db_local->find(f_stringlistitem_to_str(k));
if(depender == NULL) {
/* If the depending package no longer exists in the local db,
@@ -1804,7 +1804,7 @@ int __pmtrans_t::commit(pmlist_t **data)
depinfo = db_local->find(depend.name);
if(depinfo == NULL) {
/* look for a provides package */
-                               pmlist_t *provides = 
db_local->whatPackagesProvide(depend.name);
+                               FPtrList *provides = 
db_local->whatPackagesProvide(depend.name);
if(provides) {
/* TODO: should check _all_ packages listed in provides, not just
*                        the first one.
@@ -1852,7 +1852,7 @@ int __pmtrans_t::commit(pmlist_t **data)
* looking for packages depending on the package to add */
for(lp = _pacman_db_get_pkgcache(db_local); lp; lp = f_ptrlistitem_next(lp)) {
Package *tmpp = f_ptrlistitem_data(lp);
-                       pmlist_t *tmppm = NULL;
+                       FPtrList *tmppm = NULL;
if(tmpp == NULL) {
continue;
}
@@ -1897,7 +1897,7 @@ int __pmtrans_t::commit(pmlist_t **data)
depinfo = db_local->find(depend.name);
if(depinfo == NULL) {
/* look for a provides package */
-                               pmlist_t *provides = 
db_local->whatPackagesProvide(depend.name);
+                               FPtrList *provides = 
db_local->whatPackagesProvide(depend.name);
if(provides) {
/* TODO: should check _all_ packages listed in provides, not just
*       the first one.
diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h
index 6b5aacb..6d06719 100644
--- a/lib/libpacman/trans.h
+++ b/lib/libpacman/trans.h
@@ -61,8 +61,8 @@ struct __pmtrans_t

pmsyncpkg_t *find(const char *pkgname) const;

-       int prepare(pmlist_t **data);
-       int commit(pmlist_t **data);
+       int prepare(FPtrList **data);
+       int commit(FPtrList **data);

pmsyncpkg_t *add(pmsyncpkg_t *syncpkg, int flags);
int add(libpacman::Package *pkg, pmtranstype_t type, int flags);
@@ -74,7 +74,7 @@ struct __pmtrans_t
unsigned int flags;
unsigned char state;
FStringList *targets;
-       pmlist_t *packages;    /* pmlist_t 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/trans_sysupgrade.cpp 
b/lib/libpacman/trans_sysupgrade.cpp
index 4ec2325..86b9e51 100644
--- a/lib/libpacman/trans_sysupgrade.cpp
+++ b/lib/libpacman/trans_sysupgrade.cpp
@@ -70,10 +70,10 @@ static int istoonew(Package *pkg)

int _pacman_trans_sysupgrade(pmtrans_t *trans)
{
-       pmlist_t *i, *j, *k;
+       FPtrList *i, *j, *k;
Handle *handle;
Database *db_local;
-       pmlist_t *dbs_sync;
+       FPtrList *dbs_sync;

/* Sanity checks */
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
@@ -90,7 +90,7 @@ int _pacman_trans_sysupgrade(pmtrans_t *trans)
for(j = _pacman_db_get_pkgcache(f_ptrlistitem_data(i)); j; j = 
f_ptrlistitem_next(j)) {
Package *spkg = f_ptrlistitem_data(j);
for(k = spkg->replaces(); k; k = f_ptrlistitem_next(k)) {
-                               pmlist_t *m;
+                               FPtrList *m;
for(m = _pacman_db_get_pkgcache(db_local); m; m = f_ptrlistitem_next(m)) {
Package *lpkg = f_ptrlistitem_data(m);
if(!strcmp(f_stringlistitem_to_str(k), lpkg->name())) {
diff --git a/lib/libpacman/util.cpp b/lib/libpacman/util.cpp
index 7a3740d..02ffbfa 100644
--- a/lib/libpacman/util.cpp
+++ b/lib/libpacman/util.cpp
@@ -36,6 +36,7 @@
#include "sync.h"
#include "error.h"
#include "pacman.h"
+#include "pacman_p.h"

#include <sys/wait.h>
#include <sys/statvfs.h>
@@ -124,9 +125,9 @@ typedef struct __cache_t {
int hit;
} cache_t;

-static int list_startswith(char *needle, pmlist_t *haystack)
+static int list_startswith(char *needle, FPtrList *haystack)
{
-       pmlist_t *i;
+       FPtrList *i;

for (i = haystack; i; i = f_ptrlistitem_next(i)) {
cache_t *c = f_ptrlistitem_data(i);
@@ -143,7 +144,7 @@ int _pacman_unpack(const char *archive, const char *prefix, 
const char *fn)
register struct archive *_archive;
struct archive_entry *entry;
char expath[PATH_MAX];
-       pmlist_t *cache = NULL, *i;
+       FPtrList *cache = NULL, *i;
DIR *handle;
struct dirent *ent;
struct stat buf;
@@ -481,7 +482,7 @@ static long long get_freespace(void)

int _pacman_check_freespace(pmtrans_t *trans, pmlist_t **data)
{
-       pmlist_t *i;
+       FPtrList *i;
long long pkgsize=0, freespace;

for(i = trans->packages; i; i = f_ptrlistitem_next(i)) {
@@ -509,13 +510,15 @@ int _pacman_check_freespace(pmtrans_t *trans, pmlist_t 
**data)
return(-1);
}
*ptr = pkgsize;
-                       *data = f_ptrlist_add(*data, ptr);
+                       *data = c_cast(f_ptrlist_add(cxx_cast(*data), ptr));
if((ptr = (long long*)malloc(sizeof(long long)))==NULL) {
-                               FREELIST(*data);
+                               FPtrList *tmp = cxx_cast(*data);
+                               FREELIST(tmp);
+                               *data = NULL;
return(-1);
}
*ptr = freespace;
-                       *data = f_ptrlist_add(*data, ptr);
+                       *data = c_cast(f_ptrlist_add(cxx_cast(*data), ptr));
}
pm_errno = PM_ERR_DISK_FULL;
return(-1);
diff --git a/lib/libpacman/util/fptrlist.cpp b/lib/libpacman/util/fptrlist.cpp
index 0897e77..f91e860 100644
--- a/lib/libpacman/util/fptrlist.cpp
+++ b/lib/libpacman/util/fptrlist.cpp
@@ -232,7 +232,7 @@ int f_ptrlist_fini(FPtrList *self, FVisitor *visitor)
#ifndef F_NOCOMPAT
FPtrList *f_ptrlist_append(FPtrList *list, void *data)
{
-       pmlist_t *ptr, *lp;
+       FPtrList *ptr, *lp;

ptr = list;
if(ptr == NULL) {
diff --git a/lib/libpacman/util/fptrlist.h b/lib/libpacman/util/fptrlist.h
index e0a2c63..c453e43 100644
--- a/lib/libpacman/util/fptrlist.h
+++ b/lib/libpacman/util/fptrlist.h
@@ -28,22 +28,20 @@

#include "util/fcallback.h"

-/* Chained list struct */
-struct __pmlist_t {
-       struct __pmlist_t *m_previous;
-       struct __pmlist_t *m_next;
-       void *m_data;
-};
-
#ifndef __cplusplus

typedef struct FCList FCList;
typedef struct FCListItem FCListItem;

+typedef struct FCListItem FPtrList;
+typedef struct FCListItem FPtrListItem;
+
#else

+typedef class FCListItem FPtrList;
+typedef class FCListItem FPtrListItem;
+
class FCListItem
-       : public __pmlist_t
{
public:
FCListItem()
@@ -54,9 +52,11 @@ public:
: m_next(next), m_previous(previous)
{ }

-       virtual ~FCListItem() = 0;
+       virtual ~FCListItem()
+       { } // FIXME: Make pure virtual

-       virtual void *c_data() const = 0;
+       virtual void *c_data() const
+       { return m_data; } // FIXME: Make pure virtual

FCListItem *next()
{
@@ -78,11 +78,12 @@ public:
return m_previous;
}

-protected:
+//protected: // Disable for now
bool insert_after(FCListItem *previous);

FCListItem *m_next;
FCListItem *m_previous;
+       void *m_data; // Enabled for now
};

class FCList
@@ -171,14 +172,6 @@ protected:
extern "C" {
#endif

-#ifndef F_NOCOMPAT
-typedef struct __pmlist_t FPtrList;
-typedef struct __pmlist_t FPtrListItem;
-#else
-typedef struct FPtrList FPtrList;
-typedef struct FPtrListItem FPtrListItem;
-#endif
-
#define _FREELIST(p, f) do { if(p) { FVisitor visitor = { (FVisitorFunc)f, NULL 
}; f_ptrlist_delete(p, &visitor); p = NULL; } } while(0)

#define FREELIST(p) _FREELIST(p, free)
diff --git a/lib/libpacman/util/stringlist.h b/lib/libpacman/util/stringlist.h
index 1a9a283..9289f1e 100644
--- a/lib/libpacman/util/stringlist.h
+++ b/lib/libpacman/util/stringlist.h
@@ -29,8 +29,8 @@ extern "C" {
#endif

#ifndef F_NOCOMPAT
-typedef struct __pmlist_t FStringList;
-typedef struct __pmlist_t FStringListItem;
+typedef FPtrList FStringList;
+typedef FPtrList FStringListItem;
#else
typedef struct FStringList FStringList;
typedef struct FStringListItem FStringListItem;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to