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

commit db5acbdf58e90428f5df3c30776e26dca8101148
Author: Michel Hermier <[email protected]>
Date:   Sat Apr 26 14:44:09 2014 +0200

libpacman: s/struct pmdb_t/libpacman::Database/

diff --git a/lib/libpacman/cache.cpp b/lib/libpacman/cache.cpp
index e1fa455..392077b 100644
--- a/lib/libpacman/cache.cpp
+++ b/lib/libpacman/cache.cpp
@@ -48,15 +48,15 @@
using namespace libpacman;

static
-int _pacman_db_clear_grpcache(pmdb_t *db);
+int _pacman_db_clear_grpcache(Database *db);

static
-int _pacman_db_load_grpcache(pmdb_t *db);
+int _pacman_db_load_grpcache(Database *db);

/* Returns a new package cache from db.
* It frees the cache if it already exists.
*/
-int _pacman_db_load_pkgcache(pmdb_t *db)
+int _pacman_db_load_pkgcache(Database *db)
{
pmpkg_t *info;

@@ -81,7 +81,7 @@ int _pacman_db_load_pkgcache(pmdb_t *db)
return(0);
}

-void _pacman_db_free_pkgcache(pmdb_t *db)
+void _pacman_db_free_pkgcache(Database *db)
{
ASSERT(db != NULL, pm_errno = PM_ERR_DB_NULL; return);
if(f_ptrlist_empty(db->pkgcache)) {
@@ -96,7 +96,7 @@ void _pacman_db_free_pkgcache(pmdb_t *db)
_pacman_db_clear_grpcache(db);
}

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

@@ -107,7 +107,7 @@ pmlist_t *_pacman_db_get_pkgcache(pmdb_t *db)
return(db->pkgcache);
}

-int _pacman_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
+int _pacman_db_add_pkgincache(Database *db, pmpkg_t *pkg)
{
pmpkg_t *newpkg;

@@ -128,7 +128,7 @@ int _pacman_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg)
return(0);
}

-int _pacman_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg)
+int _pacman_db_remove_pkgfromcache(Database *db, pmpkg_t *pkg)
{
pmpkg_t *data;

@@ -151,7 +151,7 @@ int _pacman_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg)
return(0);
}

-pmpkg_t *_pacman_db_get_pkgfromcache(pmdb_t *db, const char *target)
+pmpkg_t *_pacman_db_get_pkgfromcache(Database *db, const char *target)
{
ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, NULL));
if(_pacman_strempty(target)) {
@@ -163,7 +163,7 @@ pmpkg_t *_pacman_db_get_pkgfromcache(pmdb_t *db, const char 
*target)

/* return a pmlist_t of packages in "db" that provide "package"
*/
-pmlist_t *_pacman_db_whatprovides(pmdb_t *db, char *package)
+pmlist_t *_pacman_db_whatprovides(Database *db, char *package)
{
FPtrList *pkgs = NULL;
FStrMatcher strmatcher = { NULL };
@@ -182,7 +182,7 @@ pmlist_t *_pacman_db_whatprovides(pmdb_t *db, char *package)

/* Returns a new group cache from db.
*/
-int _pacman_db_load_grpcache(pmdb_t *db)
+int _pacman_db_load_grpcache(Database *db)
{
pmlist_t *lp;

@@ -197,7 +197,7 @@ int _pacman_db_load_grpcache(pmdb_t *db)
pmpkg_t *pkg = lp->data;

if(!(pkg->infolevel & INFRQ_DESC)) {
-                       ((__pmdb_t *)pkg->data)->read(pkg, INFRQ_DESC);
+                       pkg->database->read(pkg, INFRQ_DESC);
}

for(i = pkg->groups; i; i = i->next) {
@@ -226,7 +226,7 @@ int _pacman_db_load_grpcache(pmdb_t *db)
return(0);
}

-int _pacman_db_clear_grpcache(pmdb_t *db)
+int _pacman_db_clear_grpcache(Database *db)
{
FVisitor visitor = {
.fn = (FVisitorFunc)_pacman_grp_delete,
@@ -240,7 +240,7 @@ int _pacman_db_clear_grpcache(pmdb_t *db)
return 0;
}

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

@@ -251,7 +251,7 @@ pmlist_t *_pacman_db_get_grpcache(pmdb_t *db)
return(db->grpcache);
}

-Group *_pacman_db_get_grpfromcache(pmdb_t *db, const char *target)
+Group *_pacman_db_get_grpfromcache(Database *db, const char *target)
{
pmlist_t *i;

diff --git a/lib/libpacman/cache.h b/lib/libpacman/cache.h
index bad42bb..5f5a4fa 100644
--- a/lib/libpacman/cache.h
+++ b/lib/libpacman/cache.h
@@ -26,16 +26,16 @@
#include "db.h"

/* packages */
-int _pacman_db_load_pkgcache(pmdb_t *db);
-void _pacman_db_free_pkgcache(pmdb_t *db);
-int _pacman_db_add_pkgincache(pmdb_t *db, pmpkg_t *pkg);
-int _pacman_db_remove_pkgfromcache(pmdb_t *db, pmpkg_t *pkg);
-pmlist_t *_pacman_db_get_pkgcache(pmdb_t *db);
-pmpkg_t *_pacman_db_get_pkgfromcache(pmdb_t *db, const char *target);
-pmlist_t *_pacman_db_whatprovides(pmdb_t *db, char *package);
+int _pacman_db_load_pkgcache(libpacman::Database *db);
+void _pacman_db_free_pkgcache(libpacman::Database *db);
+int _pacman_db_add_pkgincache(libpacman::Database *db, pmpkg_t *pkg);
+int _pacman_db_remove_pkgfromcache(libpacman::Database *db, pmpkg_t *pkg);
+pmlist_t *_pacman_db_get_pkgcache(libpacman::Database *db);
+pmpkg_t *_pacman_db_get_pkgfromcache(libpacman::Database *db, const char 
*target);
+pmlist_t *_pacman_db_whatprovides(libpacman::Database *db, char *package);
/* groups */
-pmlist_t *_pacman_db_get_grpcache(pmdb_t *db);
-libpacman::Group *_pacman_db_get_grpfromcache(pmdb_t *db, const char *target);
+pmlist_t *_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/config_parser.cpp b/lib/libpacman/config_parser.cpp
index 4043071..017a7f6 100644
--- a/lib/libpacman/config_parser.cpp
+++ b/lib/libpacman/config_parser.cpp
@@ -38,7 +38,7 @@
#include <stdarg.h>

/* pacman-g2 */
-#include "pacman.h"
+#include "pacman_p.h"

#include "db/syncdb.h"
#include "hash/md5.h"
@@ -61,6 +61,8 @@

#define min(X, Y)  ((X) < (Y) ? (X) : (Y))

+using namespace libpacman;
+
int _pacman_parse_config(const char *file, pacman_cb_db_register callback, 
const char *this_section)
{
FILE *fp = NULL;
@@ -69,7 +71,7 @@ int _pacman_parse_config(const char *file, 
pacman_cb_db_register callback, const
char *key = NULL;
int linenum = 0;
char section[256] = "";
-       pmdb_t *db = NULL;
+       Database *db = NULL;

/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
@@ -291,7 +293,7 @@ int _pacman_parse_config(const char *file, 
pacman_cb_db_register callback, const
if(!strcmp(key, "SERVER")) {
/* add to the list */
_pacman_log(PM_LOG_DEBUG, _("config: %s: server: %s\n"), section, ptr);
-                                               if(pacman_db_setserver(db, ptr) 
!= 0) {
+                                               
if(pacman_db_setserver(c_cast(db), ptr) != 0) {
/* pm_errno is set by pacman_set_option */
return(-1);
}
diff --git a/lib/libpacman/conflict.cpp b/lib/libpacman/conflict.cpp
index 3c5a42c..20bc44e 100644
--- a/lib/libpacman/conflict.cpp
+++ b/lib/libpacman/conflict.cpp
@@ -43,6 +43,8 @@
#include <string.h>
#include <unistd.h>

+using namespace libpacman;
+
/* Returns a pmlist_t* of pmdepmissing_t pointers.
*
* conflicts are always name only
@@ -55,7 +57,7 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t 
*packages)
pmdepmissing_t *miss = NULL;
int howmany, remain;
double percent;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

if(db_local == NULL) {
return(NULL);
@@ -264,7 +266,7 @@ pmlist_t *_pacman_db_find_conflicts(pmtrans_t *trans, char 
*root, pmlist_t **ski
pmpkg_t *p, *dbpkg;
double percent;
int howmany, remain;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

if(db_local == NULL || targets == NULL || root == NULL) {
return(NULL);
diff --git a/lib/libpacman/db.cpp b/lib/libpacman/db.cpp
index 60776ca..2ad2eac 100644
--- a/lib/libpacman/db.cpp
+++ b/lib/libpacman/db.cpp
@@ -33,7 +33,7 @@
#include "server.h"
#include "handle.h"
#include "cache.h"
-#include "pacman.h"
+#include "pacman_p.h"

#include "db/localdb.h"
#include "db/syncdb.h"
@@ -55,11 +55,11 @@

using namespace libpacman;

-static int _pacman_db_getlastupdate(pmdb_t *db, char *ts);
-static int _pacman_db_setlastupdate(pmdb_t *db, const char *ts);
+static int _pacman_db_getlastupdate(Database *db, char *ts);
+static int _pacman_db_setlastupdate(Database *db, const char *ts);

static
-FILE *_pacman_db_fopen_lastupdate(const pmdb_t *db, const char *mode)
+FILE *_pacman_db_fopen_lastupdate(const Database *db, const char *mode)
{
char path[PATH_MAX];

@@ -67,7 +67,7 @@ FILE *_pacman_db_fopen_lastupdate(const pmdb_t *db, const 
char *mode)
return fopen(path, mode);
}

-__pmdb_t::__pmdb_t(pmhandle_t *handle, const char *treename)
+Database::Database(pmhandle_t *handle, const char *treename)
{
path = f_zalloc(strlen(handle->root)+strlen(handle->dbpath)+strlen(treename)+2);
//      if(path == NULL) {
@@ -78,7 +78,7 @@ __pmdb_t::__pmdb_t(pmhandle_t *handle, const char *treename)
STRNCPY(this->treename, treename, PATH_MAX);
}

-__pmdb_t::~__pmdb_t()
+Database::~Database()
{
FREELISTSERVERS(servers);
free(path);
@@ -86,10 +86,10 @@ __pmdb_t::~__pmdb_t()

int _pacman_db_cmp(const void *db1, const void *db2)
{
-       return(strcmp(((pmdb_t *)db1)->treename, ((pmdb_t *)db2)->treename));
+       return(strcmp(((Database *)db1)->treename, ((Database 
*)db2)->treename));
}

-pmlist_t *__pmdb_t::search(pmlist_t *needles)
+pmlist_t *Database::search(pmlist_t *needles)
{
pmlist_t *i, *j, *ret = NULL;

@@ -119,24 +119,24 @@ pmlist_t *__pmdb_t::search(pmlist_t *needles)
return(ret);
}

-pmlist_t *__pmdb_t::test()
+pmlist_t *Database::test()
{
return ops->test(this);
}

-int __pmdb_t::open(int flags)
+int Database::open(int flags)
{
ASSERT(flags == 0, RET_ERR(PM_ERR_DB_OPEN, -1)); /* No flags are supported for 
now */

return ops->open(this, flags, &cache_timestamp);
}

-int __pmdb_t::close()
+int Database::close()
{
return ops->close(this);
}

-int __pmdb_t::gettimestamp(time_t *timestamp)
+int Database::gettimestamp(time_t *timestamp)
{
ASSERT(timestamp != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));

@@ -155,7 +155,7 @@ int __pmdb_t::gettimestamp(time_t *timestamp)

/* A NULL timestamp means now per f_localtime definition.
*/
-int __pmdb_t::settimestamp(const time_t *timestamp)
+int Database::settimestamp(const time_t *timestamp)
{
char buffer[PM_FMT_MDTM_MAX];

@@ -163,22 +163,22 @@ int __pmdb_t::settimestamp(const time_t *timestamp)
return _pacman_db_setlastupdate(this, buffer);
}

-int __pmdb_t::rewind()
+int Database::rewind()
{
return ops->rewind(this);
}

-pmpkg_t *__pmdb_t::readpkg(unsigned int inforeq)
+pmpkg_t *Database::readpkg(unsigned int inforeq)
{
return ops->readpkg(this, inforeq);
}

-pmpkg_t *__pmdb_t::scan(const char *target, unsigned int inforeq)
+pmpkg_t *Database::scan(const char *target, unsigned int inforeq)
{
return ops->scan(this, target, inforeq);
}

-int __pmdb_t::read(pmpkg_t *info, unsigned int inforeq)
+int Database::read(pmpkg_t *info, unsigned int inforeq)
{
int ret;

@@ -194,7 +194,7 @@ int __pmdb_t::read(pmpkg_t *info, unsigned int inforeq)
return ret;
}

-int __pmdb_t::write(pmpkg_t *info, unsigned int inforeq)
+int Database::write(pmpkg_t *info, unsigned int inforeq)
{
ASSERT(info != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1));

@@ -205,7 +205,7 @@ int __pmdb_t::write(pmpkg_t *info, unsigned int inforeq)
}
}

-int __pmdb_t::remove(pmpkg_t *info)
+int Database::remove(pmpkg_t *info)
{
ASSERT(info != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1));

@@ -221,7 +221,7 @@ int __pmdb_t::remove(pmpkg_t *info)
*
* Returns 0 on success, -1 on error.
*/
-int _pacman_db_getlastupdate(pmdb_t *db, char *ts)
+int _pacman_db_getlastupdate(Database *db, char *ts)
{
FILE *fp;

@@ -251,7 +251,7 @@ int _pacman_db_getlastupdate(pmdb_t *db, char *ts)
*
* Returns 0 on success, -1 on error.
*/
-int _pacman_db_setlastupdate(pmdb_t *db, const char *ts)
+int _pacman_db_setlastupdate(Database *db, const char *ts)
{
FILE *fp;

@@ -271,9 +271,9 @@ int _pacman_db_setlastupdate(pmdb_t *db, const char *ts)
return(0);
}

-pmdb_t *_pacman_db_register(const char *treename, pacman_cb_db_register 
callback)
+Database *_pacman_db_register(const char *treename, pacman_cb_db_register 
callback)
{
-       pmdb_t *db;
+       Database *db;

if(strcmp(treename, "local") == 0) {
if(handle->db_local != NULL) {
@@ -283,7 +283,7 @@ pmdb_t *_pacman_db_register(const char *treename, 
pacman_cb_db_register callback
} else {
pmlist_t *i;
for(i = handle->dbs_sync; i; i = i->next) {
-                       pmdb_t *sdb = i->data;
+                       Database *sdb = i->data;
if(strcmp(treename, sdb->treename) == 0) {
_pacman_log(PM_LOG_DEBUG, _("attempt to re-register the '%s' database, using 
existing\n"), sdb->treename);
return sdb;
@@ -293,7 +293,7 @@ pmdb_t *_pacman_db_register(const char *treename, 
pacman_cb_db_register callback

_pacman_log(PM_LOG_FLOW1, _("registering database '%s'"), treename);

-       db = new __pmdb_t(handle, treename);
+       db = new Database(handle, treename);
if(db == NULL) {
RET_ERR(PM_ERR_DB_CREATE, NULL);
}
@@ -310,7 +310,7 @@ pmdb_t *_pacman_db_register(const char *treename, 
pacman_cb_db_register callback
}

/* Only call callback on NEW registration. */
-       if(callback) callback(treename, db);
+       if(callback) callback(treename, c_cast(db));

if(strcmp(treename, "local") == 0) {
handle->db_local = db;
@@ -320,8 +320,4 @@ pmdb_t *_pacman_db_register(const char *treename, 
pacman_cb_db_register callback
return(db);
}

-Database::~Database()
-{
-}
-
/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h
index fb79a09..7480617 100644
--- a/lib/libpacman/db.h
+++ b/lib/libpacman/db.h
@@ -37,46 +37,56 @@
#define INFRQ_SCRIPLET 0x08
#define INFRQ_ALL      0xFF

+namespace libpacman {
+
+class Database;
+
+}
+
typedef struct __pmdb_ops_t pmdb_ops_t;

struct __pmdb_ops_t {
-       pmlist_t *(*test)(pmdb_t *db);
-       int (*open)(pmdb_t *db, int flags, time_t *timestamp);
-       int (*close)(pmdb_t *db);
+       pmlist_t *(*test)(libpacman::Database *db);
+       int (*open)(libpacman::Database *db, int flags, time_t *timestamp);
+       int (*close)(libpacman::Database *db);

-       int (*gettimestamp)(pmdb_t *db, time_t *timestamp);
+       int (*gettimestamp)(libpacman::Database *db, time_t *timestamp);

/* Package iterator */
-       int (*rewind)(pmdb_t *db);
-       pmpkg_t *(*readpkg)(pmdb_t *db, unsigned int inforeq);
-       pmpkg_t *(*scan)(pmdb_t *db, const char *target, unsigned int inforeq);
+       int (*rewind)(libpacman::Database *db);
+       pmpkg_t *(*readpkg)(libpacman::Database *db, unsigned int inforeq);
+       pmpkg_t *(*scan)(libpacman::Database *db, const char *target, unsigned 
int inforeq);

-       int (*read)(pmdb_t *db, pmpkg_t *info, unsigned int inforeq);
-       int (*write)(pmdb_t *db, pmpkg_t *info, unsigned int inforeq); /* 
Optional */
-       int (*remove)(pmdb_t *db, pmpkg_t *info); /* Optional */
+       int (*read)(libpacman::Database *db, pmpkg_t *info, unsigned int 
inforeq);
+       int (*write)(libpacman::Database *db, pmpkg_t *info, unsigned int 
inforeq); /* Optional */
+       int (*remove)(libpacman::Database *db, pmpkg_t *info); /* Optional */
};

-/* Database */
-struct __pmdb_t {
-       __pmdb_t(pmhandle_t *handle, const char *treename);
-       ~__pmdb_t();
+namespace libpacman {
+
+class Database
+       : public libpacman::Object
+{
+       public:
+       Database(pmhandle_t *handle, const char *treename);
+       virtual ~Database();

/* Prototypes for backends functions */
-       pmlist_t *test(); /* FIXME: constify */
+       virtual pmlist_t *test(); /* FIXME: constify */

-       int open(int flags);
-       int close();
+       virtual int open(int flags);
+       virtual int close();

-       int gettimestamp(time_t *timestamp);
-       int settimestamp(const time_t *timestamp);
+       virtual int gettimestamp(time_t *timestamp);
+       virtual int settimestamp(const time_t *timestamp);

-       int rewind();
-       pmpkg_t *readpkg(unsigned int inforeq);
-       pmpkg_t *scan(const char *target, unsigned int inforeq);
+       virtual int rewind();
+       virtual pmpkg_t *readpkg(unsigned int inforeq);
+       virtual pmpkg_t *scan(const char *target, unsigned int inforeq);

-       int read(pmpkg_t *info, unsigned int inforeq);
-       int write(pmpkg_t *info, unsigned int inforeq);
-       int remove(pmpkg_t *info);
+       virtual int read(pmpkg_t *info, unsigned int inforeq);
+       virtual int write(pmpkg_t *info, unsigned int inforeq);
+       virtual int remove(pmpkg_t *info);

// Cache operations
pmlist_t *search(pmlist_t *needles);
@@ -91,21 +101,11 @@ struct __pmdb_t {
pmlist_t *servers;
};

-int _pacman_db_cmp(const void *db1, const void *db2);
-
-pmdb_t *_pacman_db_register(const char *treename, pacman_cb_db_register 
callback);
-
-namespace libpacman
-{
+}

-class Database
-       : public libpacman::Object
-{
-public:
-       virtual ~Database();
-};
+int _pacman_db_cmp(const void *db1, const void *db2);

-}
+libpacman::Database *_pacman_db_register(const char *treename, 
pacman_cb_db_register callback);

#endif /* _PACMAN_DB_H */

diff --git a/lib/libpacman/db/localdb.cpp b/lib/libpacman/db/localdb.cpp
index d1510c5..7aba8f7 100644
--- a/lib/libpacman/db/localdb.cpp
+++ b/lib/libpacman/db/localdb.cpp
@@ -48,13 +48,13 @@
using namespace libpacman;

static
-int _pacman_localdb_write(pmdb_t *db, pmpkg_t *info, unsigned int inforeq);
+int _pacman_localdb_write(Database *db, pmpkg_t *info, unsigned int inforeq);

static
-int _pacman_localdb_remove(pmdb_t *db, pmpkg_t *info);
+int _pacman_localdb_remove(Database *db, pmpkg_t *info);

static
-int _pacman_localpkg_file_reader(pmdb_t *db, pmpkg_t *pkg, unsigned int flags, 
unsigned int flags_masq, const char *file, int (*reader)(pmpkg_t *, FILE *))
+int _pacman_localpkg_file_reader(Database *db, pmpkg_t *pkg, unsigned int 
flags, unsigned int flags_masq, const char *file, int (*reader)(pmpkg_t *, FILE 
*))
{
int ret = 0;

@@ -78,7 +78,7 @@ int _pacman_localpkg_file_reader(pmdb_t *db, pmpkg_t *pkg, 
unsigned int flags, u
static int
_pacman_localpkg_read(pmpkg_t *pkg, unsigned int flags)
{
-       pmdb_t *db;
+       Database *db;
struct stat buf;
char path[PATH_MAX];

@@ -140,7 +140,7 @@ struct __pmpkg_operations_t _pacman_localpkg_operations = {
};

static
-int _pacman_localpkg_init(pmpkg_t *pkg, pmdb_t *db)
+int _pacman_localpkg_init(pmpkg_t *pkg, Database *db)
{
ASSERT(pkg != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1));
ASSERT(_pacman_pkg_init(pkg, db) == 0, return -1);
@@ -149,7 +149,7 @@ int _pacman_localpkg_init(pmpkg_t *pkg, pmdb_t *db)
}

static
-pmpkg_t *_pacman_localdb_pkg_new(pmdb_t *db, const struct dirent *dirent, 
unsigned int inforeq)
+pmpkg_t *_pacman_localdb_pkg_new(Database *db, const struct dirent *dirent, 
unsigned int inforeq)
{
pmpkg_t *pkg;
const char *dname;
@@ -168,7 +168,7 @@ pmpkg_t *_pacman_localdb_pkg_new(pmdb_t *db, const struct 
dirent *dirent, unsign
}

static
-pmlist_t *_pacman_localdb_test(pmdb_t *db)
+pmlist_t *_pacman_localdb_test(Database *db)
{
struct dirent *ent;
char path[PATH_MAX];
@@ -205,7 +205,7 @@ pmlist_t *_pacman_localdb_test(pmdb_t *db)
}

static
-int _pacman_localdb_open(pmdb_t *db, int flags, time_t *timestamp)
+int _pacman_localdb_open(Database *db, int flags, time_t *timestamp)
{
struct stat buf;

@@ -223,7 +223,7 @@ int _pacman_localdb_open(pmdb_t *db, int flags, time_t 
*timestamp)
}

static
-int _pacman_localdb_close(pmdb_t *db)
+int _pacman_localdb_close(Database *db)
{
if(db->handle) {
closedir(db->handle);
@@ -233,7 +233,7 @@ int _pacman_localdb_close(pmdb_t *db)
}

static
-int _pacman_localdb_rewind(pmdb_t *db)
+int _pacman_localdb_rewind(Database *db)
{
if(db->handle == NULL) {
return -1;
@@ -244,7 +244,7 @@ int _pacman_localdb_rewind(pmdb_t *db)
}

static
-pmpkg_t *_pacman_localdb_readpkg(pmdb_t *db, unsigned int inforeq)
+pmpkg_t *_pacman_localdb_readpkg(Database *db, unsigned int inforeq)
{
struct dirent *ent = NULL;
struct stat sbuf;
@@ -266,7 +266,7 @@ pmpkg_t *_pacman_localdb_readpkg(pmdb_t *db, unsigned int 
inforeq)
}

static
-pmpkg_t *_pacman_localdb_scan(pmdb_t *db, const char *target, unsigned int 
inforeq)
+pmpkg_t *_pacman_localdb_scan(Database *db, const char *target, unsigned int 
inforeq)
{
struct dirent *ent = NULL;
struct stat sbuf;
@@ -307,7 +307,7 @@ pmpkg_t *_pacman_localdb_scan(pmdb_t *db, const char 
*target, unsigned int infor
}

static
-int _pacman_localdb_file_reader(pmdb_t *db, pmpkg_t *info, unsigned int 
inforeq, unsigned int inforeq_masq, const char *file, int (*reader)(pmpkg_t *, 
FILE *))
+int _pacman_localdb_file_reader(Database *db, pmpkg_t *info, unsigned int 
inforeq, unsigned int inforeq_masq, const char *file, int (*reader)(pmpkg_t *, 
FILE *))
{
int ret = 0;

@@ -329,7 +329,7 @@ int _pacman_localdb_file_reader(pmdb_t *db, pmpkg_t *info, 
unsigned int inforeq,
}

static
-int _pacman_localdb_read(pmdb_t *db, pmpkg_t *info, unsigned int inforeq)
+int _pacman_localdb_read(Database *db, pmpkg_t *info, unsigned int inforeq)
{
struct stat buf;
char path[PATH_MAX];
@@ -397,7 +397,7 @@ void _pacman_localdb_write_stringlist(const char *entry, 
const pmlist_t *values,
}

static
-int _pacman_localdb_write(pmdb_t *db, pmpkg_t *info, unsigned int inforeq)
+int _pacman_localdb_write(Database *db, pmpkg_t *info, unsigned int inforeq)
{
FILE *fp = NULL;
char path[PATH_MAX];
@@ -491,7 +491,7 @@ cleanup:
}

static
-int _pacman_localdb_remove(pmdb_t *db, pmpkg_t *info)
+int _pacman_localdb_remove(Database *db, pmpkg_t *info)
{
char path[PATH_MAX];

diff --git a/lib/libpacman/db/syncdb.cpp b/lib/libpacman/db/syncdb.cpp
index 61de0cd..29f76bb 100644
--- a/lib/libpacman/db/syncdb.cpp
+++ b/lib/libpacman/db/syncdb.cpp
@@ -62,7 +62,7 @@ int suffixcmp(const char *str, const char *suffix)
}

static
-int _pacman_syncpkg_file_reader(pmdb_t *db, pmpkg_t *pkg, unsigned int flags, 
unsigned int flags_masq, int (*reader)(pmpkg_t *, FILE *))
+int _pacman_syncpkg_file_reader(Database *db, pmpkg_t *pkg, unsigned int 
flags, unsigned int flags_masq, int (*reader)(pmpkg_t *, FILE *))
{
int ret = 0;

@@ -79,7 +79,7 @@ int _pacman_syncpkg_file_reader(pmdb_t *db, pmpkg_t *pkg, 
unsigned int flags, un
static
int _pacman_syncpkg_read(pmpkg_t *pkg, unsigned int flags)
{
-       pmdb_t *db;
+       Database *db;
int descdone = 0, depsdone = 0;

ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
@@ -123,7 +123,7 @@ struct __pmpkg_operations_t _pacman_syncpkg_operations = {
};

static
-int _pacman_syncpkg_init(pmpkg_t *pkg, pmdb_t *db)
+int _pacman_syncpkg_init(pmpkg_t *pkg, Database *db)
{
ASSERT(pkg != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1));
ASSERT(_pacman_pkg_init(pkg, db) == 0, return -1);
@@ -132,7 +132,7 @@ int _pacman_syncpkg_init(pmpkg_t *pkg, pmdb_t *db)
}

static
-pmpkg_t *_pacman_syncdb_pkg_new(pmdb_t *db, const struct archive_entry *entry, 
unsigned int inforeq)
+pmpkg_t *_pacman_syncdb_pkg_new(Database *db, const struct archive_entry 
*entry, unsigned int inforeq)
{
pmpkg_t *pkg;
const char *dname;
@@ -151,13 +151,13 @@ pmpkg_t *_pacman_syncdb_pkg_new(pmdb_t *db, const struct 
archive_entry *entry, u
}

static
-pmlist_t *_pacman_syncdb_test(pmdb_t *db)
+pmlist_t *_pacman_syncdb_test(Database *db)
{
/* testing sync dbs is not supported */
return _pacman_list_new();
}

-int _pacman_syncdb_update(pmdb_t *db, int force)
+int _pacman_syncdb_update(Database *db, int force)
{
char path[PATH_MAX], dirpath[PATH_MAX];
pmlist_t *files = NULL;
@@ -208,7 +208,7 @@ int _pacman_syncdb_update(pmdb_t *db, int force)
}

static
-int _pacman_syncdb_open(pmdb_t *db, int flags, time_t *timestamp)
+int _pacman_syncdb_open(Database *db, int flags, time_t *timestamp)
{
struct stat buf;
char dbpath[PATH_MAX];
@@ -230,7 +230,7 @@ int _pacman_syncdb_open(pmdb_t *db, int flags, time_t 
*timestamp)
}

static
-int _pacman_syncdb_close(pmdb_t *db)
+int _pacman_syncdb_close(Database *db)
{
if(db->handle) {
archive_read_finish(db->handle);
@@ -240,14 +240,14 @@ int _pacman_syncdb_close(pmdb_t *db)
}

static
-int _pacman_syncdb_rewind(pmdb_t *db)
+int _pacman_syncdb_rewind(Database *db)
{
_pacman_syncdb_close(db);
return _pacman_syncdb_open(db, 0, NULL);
}

static
-pmpkg_t *_pacman_syncdb_readpkg(pmdb_t *db, unsigned int inforeq)
+pmpkg_t *_pacman_syncdb_readpkg(Database *db, unsigned int inforeq)
{
struct archive_entry *entry = NULL;

@@ -274,7 +274,7 @@ pmpkg_t *_pacman_syncdb_readpkg(pmdb_t *db, unsigned int 
inforeq)
}

static
-pmpkg_t *_pacman_syncdb_scan(pmdb_t *db, const char *target, unsigned int 
inforeq)
+pmpkg_t *_pacman_syncdb_scan(Database *db, const char *target, unsigned int 
inforeq)
{
char name[PKG_FULLNAME_LEN];
char *ptr = NULL;
@@ -309,7 +309,7 @@ pmpkg_t *_pacman_syncdb_scan(pmdb_t *db, const char 
*target, unsigned int infore
}

static
-int _pacman_syncdb_file_reader(pmdb_t *db, pmpkg_t *info, unsigned int 
inforeq, unsigned int inforeq_masq, int (*reader)(pmpkg_t *, FILE *))
+int _pacman_syncdb_file_reader(Database *db, pmpkg_t *info, unsigned int 
inforeq, unsigned int inforeq_masq, int (*reader)(pmpkg_t *, FILE *))
{
int ret = 0;

@@ -324,7 +324,7 @@ int _pacman_syncdb_file_reader(pmdb_t *db, pmpkg_t *info, 
unsigned int inforeq,
}

static
-int _pacman_syncdb_read(pmdb_t *db, pmpkg_t *info, unsigned int inforeq)
+int _pacman_syncdb_read(Database *db, pmpkg_t *info, unsigned int inforeq)
{
int descdone = 0, depsdone = 0;

diff --git a/lib/libpacman/db/syncdb.h b/lib/libpacman/db/syncdb.h
index db23d90..312dde8 100644
--- a/lib/libpacman/db/syncdb.h
+++ b/lib/libpacman/db/syncdb.h
@@ -27,7 +27,7 @@
extern
const pmdb_ops_t _pacman_syncdb_ops;

-int _pacman_syncdb_update(pmdb_t *db, int force);
+int _pacman_syncdb_update(libpacman::Database *db, int force);

namespace libpacman
{
diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp
index 8734abd..5c04927 100644
--- a/lib/libpacman/deps.cpp
+++ b/lib/libpacman/deps.cpp
@@ -43,6 +43,8 @@
#include "versioncmp.h"
#include "handle.h"

+using namespace libpacman;
+
static pmgraph_t *_pacman_graph_new(void)
{
pmgraph_t *graph = _pacman_zalloc(sizeof(pmgraph_t));
@@ -212,7 +214,7 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char 
op, pmlist_t *packag
int found = 0;
pmlist_t *baddeps = NULL;
pmdepmissing_t *miss = NULL;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

if(db_local == NULL) {
return(NULL);
@@ -492,7 +494,7 @@ int _pacman_splitdep(char *depstr, pmdepend_t *depend)
* 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(pmdb_t *db, pmlist_t *targs)
+pmlist_t *_pacman_removedeps(Database *db, pmlist_t *targs)
{
pmlist_t *i, *j, *k;
pmlist_t *newtargs = targs;
@@ -760,7 +762,7 @@ int pacman_output_generate(pmlist_t *targets, pmlist_t 
*dblist) {
int foundMatch = 0;
unsigned int inforeq =  INFRQ_DEPENDS;
for(j = dblist; j; j = j->next) {
-        pmdb_t *db = j->data;
+        Database *db = j->data;
do {
foundMatch = 0;
pkg = db->readpkg(inforeq);
diff --git a/lib/libpacman/deps.h b/lib/libpacman/deps.h
index 1005167..5948676 100644
--- a/lib/libpacman/deps.h
+++ b/lib/libpacman/deps.h
@@ -52,7 +52,7 @@ int _pacman_depmiss_isin(pmdepmissing_t *needle, pmlist_t 
*haystack);
pmlist_t *_pacman_sortbydeps(pmlist_t *targets, int mode);
pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t 
*packages);
int _pacman_splitdep(char *depstr, pmdepend_t *depend);
-pmlist_t *_pacman_removedeps(pmdb_t *db, pmlist_t *targs);
+pmlist_t *_pacman_removedeps(libpacman::Database *db, pmlist_t *targs);
int _pacman_resolvedeps(pmtrans_t *trans, pmpkg_t *syncpkg, pmlist_t *list,
pmlist_t *trail, pmlist_t **data);
int _pacman_depcmp(pmpkg_t *pkg, pmdepend_t *dep);
diff --git a/lib/libpacman/handle.h b/lib/libpacman/handle.h
index b5b8271..be79a84 100644
--- a/lib/libpacman/handle.h
+++ b/lib/libpacman/handle.h
@@ -34,6 +34,12 @@ typedef struct __pmhandle_t pmhandle_t;
#include "object.h"
#include "trans.h"

+namespace libpacman {
+
+class Database;
+
+}
+
typedef enum __pmaccess_t {
PM_ACCESS_RO,
PM_ACCESS_RW
@@ -42,8 +48,8 @@ typedef enum __pmaccess_t {
struct __pmhandle_t {
pmaccess_t access;
uid_t uid;
-       pmdb_t *db_local;
-       pmlist_t *dbs_sync; /* List of (pmdb_t *) */
+       libpacman::Database *db_local;
+       pmlist_t *dbs_sync; /* List of (libpacman::Database *) */
FILE *logfd;
FFileLock *filelock;
pmtrans_t *trans;
diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp
index ad1011f..48c26c2 100644
--- a/lib/libpacman/package.cpp
+++ b/lib/libpacman/package.cpp
@@ -211,7 +211,7 @@ int _pacman_pkg_delete(pmpkg_t *self)
return 0;
}

-int _pacman_pkg_init(pmpkg_t *self, pmdb_t *db)
+int _pacman_pkg_init(pmpkg_t *self, Database *db)
{
ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
ASSERT(_pacman_object_init(&self->as_pmobject_t, NULL) == 0, return -1);
@@ -431,7 +431,7 @@ void *__pacman_pkg_getinfo(pmpkg_t *pkg, unsigned char parm)
case PM_PKG_FORCE:
if(!(pkg->infolevel & INFRQ_DESC)) {
_pacman_log(PM_LOG_DEBUG, _("loading DESC info for '%s'"), pkg->name);
-                                       ((__pmdb_t *)pkg->data)->read(pkg, 
INFRQ_DESC);
+                                       pkg->database->read(pkg, INFRQ_DESC);
}
break;
/* Depends entry */
@@ -441,7 +441,7 @@ void *__pacman_pkg_getinfo(pmpkg_t *pkg, unsigned char parm)
case PM_PKG_PROVIDES:
if(!(pkg->infolevel & INFRQ_DEPENDS)) {
_pacman_log(PM_LOG_DEBUG, "loading DEPENDS info for '%s'", pkg->name);
-                                       ((__pmdb_t *)pkg->data)->read(pkg, 
INFRQ_DEPENDS);
+                                       pkg->database->read(pkg, INFRQ_DEPENDS);
}
break;
/* Files entry */
@@ -449,14 +449,14 @@ void *__pacman_pkg_getinfo(pmpkg_t *pkg, unsigned char 
parm)
case PM_PKG_BACKUP:
if(pkg->data == handle->db_local && !(pkg->infolevel & INFRQ_FILES)) {
_pacman_log(PM_LOG_DEBUG, _("loading FILES info for '%s'"), pkg->name);
-                                       ((__pmdb_t *)pkg->data)->read(pkg, 
INFRQ_FILES);
+                                       pkg->database->read(pkg, INFRQ_FILES);
}
break;
/* Scriptlet */
case PM_PKG_SCRIPLET:
if(pkg->data == handle->db_local && !(pkg->infolevel & INFRQ_SCRIPLET)) {
_pacman_log(PM_LOG_DEBUG, _("loading SCRIPLET info for '%s'"), pkg->name);
-                                       ((__pmdb_t *)pkg->data)->read(pkg, 
INFRQ_SCRIPLET);
+                                       pkg->database->read(pkg, 
INFRQ_SCRIPLET);
}
break;
}
diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h
index ae864a4..3142da0 100644
--- a/lib/libpacman/package.h
+++ b/lib/libpacman/package.h
@@ -89,7 +89,7 @@ struct __pmpkg_operations_t {
/* IMPROVEMENT: Add a dirty_flags to know what flags needs to be written */
struct __pmpkg_t {
struct __pmobject_t as_pmobject_t;
-       pmdb_t *database;
+       libpacman::Database *database;

unsigned int flags;
char name[PKG_NAME_LEN];
@@ -144,7 +144,7 @@ pmpkg_t *_pacman_pkg_new_from_filename(const char 
*filename, int witharch);
pmpkg_t *_pacman_pkg_dup(pmpkg_t *pkg);
int _pacman_pkg_delete(pmpkg_t *self);

-int _pacman_pkg_init(pmpkg_t *self, pmdb_t *db);
+int _pacman_pkg_init(pmpkg_t *self, libpacman::Database *db);
int _pacman_pkg_fini(pmpkg_t *self);

int _pacman_pkg_cmp(const void *p1, const void *p2);
diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp
index d4ba7ec..14a65d5 100644
--- a/lib/libpacman/pacman.cpp
+++ b/lib/libpacman/pacman.cpp
@@ -25,7 +25,7 @@
#include "config.h"

/* pacman-g2 */
-#include "pacman.h"
+#include "pacman_p.h"

#include "package/fpmpackage.h"
#include "config_parser.h"
@@ -63,15 +63,6 @@

using namespace libpacman;

-#define DEFINE_CAST(c_type, cxx_type)  \
-static c_type *c_cast(cxx_type *obj)   \
-{ return (c_type *)obj; }              \
-                                       \
-static cxx_type *cxx_cast(c_type *obj) \
-{ return (cxx_type *)obj; }
-
-DEFINE_CAST(struct __pmgrp_t, Group)
-
/* Globals */
pmhandle_t *handle = NULL;
enum __pmerrno_t pm_errno;
@@ -122,7 +113,7 @@ int pacman_release(void)
/* close local database */
if(handle->db_local) {
/* db_unregister() will set handle->db_local to NULL */
-               pacman_db_unregister(handle->db_local);
+               pacman_db_unregister(c_cast(handle->db_local));
}
/* and also sync ones */
while(handle->dbs_sync) {
@@ -189,15 +180,16 @@ pmdb_t *pacman_db_register(const char *treename)
/* Do not register a database if a transaction is on-going */
ASSERT(handle->trans == NULL, RET_ERR(PM_ERR_TRANS_NOT_NULL, NULL));

-       return(_pacman_db_register(treename, NULL));
+       return c_cast(_pacman_db_register(treename, NULL));
}

/** Unregister a package database
* @param db pointer to the package database to unregister
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
-int pacman_db_unregister(pmdb_t *db)
+int pacman_db_unregister(pmdb_t *_db)
{
+       Database *db = cxx_cast(_db);
int found = 0;

/* Sanity checks */
@@ -239,8 +231,9 @@ int pacman_db_unregister(pmdb_t *db)
* @param parm name of the info to get
* @return a void* on success (the value), NULL on error
*/
-void *pacman_db_getinfo(pmdb_t *db, unsigned char parm)
+void *pacman_db_getinfo(pmdb_t *_db, unsigned char parm)
{
+       Database *db = cxx_cast(_db);
void *data = NULL;
char path[PATH_MAX];
pmserver_t *server;
@@ -274,8 +267,9 @@ void *pacman_db_getinfo(pmdb_t *db, unsigned char parm)
* @param url url of the server
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
-int pacman_db_setserver(pmdb_t *db, char *url)
+int pacman_db_setserver(pmdb_t *_db, char *url)
{
+       Database *db = cxx_cast(_db);
int found = 0;

/* Sanity checks */
@@ -288,7 +282,7 @@ int pacman_db_setserver(pmdb_t *db, char *url)
} else {
pmlist_t *i;
for(i = handle->dbs_sync; i && !found; i = i->next) {
-                       pmdb_t *sdb = i->data;
+                       Database *sdb = i->data;
if(strcmp(db->treename, sdb->treename) == 0) {
found = 1;
}
@@ -322,8 +316,9 @@ int pacman_db_setserver(pmdb_t *db, char *url)
* @return 0 on success, -1 on error (pm_errno is set accordingly), 1 if up
* to date
*/
-int pacman_db_update(int force, pmdb_t *db)
+int pacman_db_update(int force, pmdb_t *_db)
{
+       Database *db = cxx_cast(_db);
int status=0;

/* Sanity checks */
@@ -351,8 +346,10 @@ int pacman_db_update(int force, pmdb_t *db)
* @param name of the package
* @return the package entry on success, NULL on error
*/
-pmpkg_t *pacman_db_readpkg(pmdb_t *db, const char *name)
+pmpkg_t *pacman_db_readpkg(pmdb_t *_db, const char *name)
{
+       Database *db = cxx_cast(_db);
+
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
@@ -366,8 +363,10 @@ pmpkg_t *pacman_db_readpkg(pmdb_t *db, const char *name)
* @return the list of packages on success, NULL on error. Returned list
* is an internally cached list and shouldn't be freed.
*/
-pmlist_t *pacman_db_getpkgcache(pmdb_t *db)
+pmlist_t *pacman_db_getpkgcache(pmdb_t *_db)
{
+       Database *db = cxx_cast(_db);
+
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
@@ -380,8 +379,10 @@ pmlist_t *pacman_db_getpkgcache(pmdb_t *db)
* @param name name of the package
* @return the list of packages on success, NULL on error
*/
-pmlist_t *pacman_db_whatprovides(pmdb_t *db, char *name)
+pmlist_t *pacman_db_whatprovides(pmdb_t *_db, char *name)
{
+       Database *db = cxx_cast(_db);
+
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
@@ -395,8 +396,10 @@ pmlist_t *pacman_db_whatprovides(pmdb_t *db, char *name)
* @param name of the group
* @return the groups entry on success, NULL on error
*/
-pmgrp_t *pacman_db_readgrp(pmdb_t *db, char *name)
+pmgrp_t *pacman_db_readgrp(pmdb_t *_db, char *name)
{
+       Database *db = cxx_cast(_db);
+
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
@@ -410,8 +413,10 @@ pmgrp_t *pacman_db_readgrp(pmdb_t *db, char *name)
* @return the list of groups on success, NULL on error. Returned list
* is an internally cached list and shouldn't be freed.
*/
-pmlist_t *pacman_db_getgrpcache(pmdb_t *db)
+pmlist_t *pacman_db_getgrpcache(pmdb_t *_db)
{
+       Database *db = cxx_cast(_db);
+
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
@@ -731,8 +736,10 @@ int pacman_sync_cleancache(int full)
* @param db pointer to the package database to search in
* @return the list of problems found on success, NULL on error
*/
-pmlist_t *pacman_db_test(pmdb_t *db)
+pmlist_t *pacman_db_test(pmdb_t *_db)
{
+       Database *db = cxx_cast(_db);
+
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(db != NULL, return(NULL));
@@ -744,8 +751,9 @@ pmlist_t *pacman_db_test(pmdb_t *db)
* @param db pointer to the package database to search in
* @return the list of packages on success, NULL on error
*/
-pmlist_t *pacman_db_search(pmdb_t *db)
+pmlist_t *pacman_db_search(pmdb_t *_db)
{
+       Database *db = cxx_cast(_db);
pmlist_t *ret;

/* Sanity checks */
diff --git a/lib/libpacman/pacman_p.h b/lib/libpacman/pacman_p.h
new file mode 100644
index 0000000..b7ef7d8
--- /dev/null
+++ b/lib/libpacman/pacman_p.h
@@ -0,0 +1,47 @@
+/*
+ * pacman_p.h
+ *
+ *  Copyright (c) 2014 by Michel Hermier <[email protected]>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ *  USA.
+ */
+#ifndef _PACMAN_P_H
+#define _PACMAN_P_H
+
+#include "pacman.h"
+
+#define DEFINE_CAST(c_type, cxx_type)  \
+       static c_type *c_cast(cxx_type *obj)   \
+{ return (c_type *)obj; }              \
+                                       \
+static cxx_type *cxx_cast(c_type *obj) \
+{ return (cxx_type *)obj; }
+
+namespace libpacman {
+
+class Database;
+class Group;
+
+}
+
+DEFINE_CAST(struct __pmdb_t, libpacman::Database)
+DEFINE_CAST(struct __pmgrp_t, libpacman::Group)
+
+#undef DEFINE_CAST
+
+#endif /* _PACMAN_P_H */
+
+/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libpacman/sync.cpp b/lib/libpacman/sync.cpp
index c707d57..c03bc3d 100644
--- a/lib/libpacman/sync.cpp
+++ b/lib/libpacman/sync.cpp
@@ -39,7 +39,7 @@
#include "versioncmp.h"
#include "handle.h"
#include "util.h"
-#include "pacman.h"
+#include "pacman_p.h"
#include "handle.h"
#include "server.h"
#include "packages_transaction.h"
@@ -59,6 +59,8 @@
#include <stdio.h>
#include <time.h>

+using namespace libpacman;
+
pmsyncpkg_t *_pacman_syncpkg_new(int type, pmpkg_t *spkg, void *data)
{
pmsyncpkg_t *ps;
@@ -104,7 +106,7 @@ int _pacman_sync_addtarget(pmtrans_t *trans, const char 
*name)
pmpkg_t *pkg_local;
pmpkg_t *spkg = NULL;
int cmp;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;
pmlist_t *dbs_sync = trans->handle->dbs_sync;

ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
@@ -117,7 +119,7 @@ int _pacman_sync_addtarget(pmtrans_t *trans, const char 
*name)
*targ = '\0';
targ++;
for(j = dbs_sync; j && !spkg; j = j->next) {
-                       pmdb_t *dbs = j->data;
+                       Database *dbs = j->data;
if(strcmp(dbs->treename, targline) == 0) {
spkg = _pacman_db_get_pkgfromcache(dbs, targ);
if(spkg == NULL) {
@@ -137,14 +139,14 @@ int _pacman_sync_addtarget(pmtrans_t *trans, const char 
*name)
} else {
targ = targline;
for(j = dbs_sync; j && !spkg; j = j->next) {
-                       pmdb_t *dbs = j->data;
+                       Database *dbs = j->data;
spkg = _pacman_db_get_pkgfromcache(dbs, targ);
}
if(spkg == NULL) {
/* Search provides */
_pacman_log(PM_LOG_FLOW2, _("target '%s' not found -- looking for provisions"), 
targ);
for(j = dbs_sync; j && !spkg; j = j->next) {
-                               pmdb_t *dbs = j->data;
+                               Database *dbs = j->data;
pmlist_t *p = _pacman_db_whatprovides(dbs, targ);
if(p) {
_pacman_log(PM_LOG_DEBUG, _("found '%s' as a provision for '%s'"), p->data, 
targ);
@@ -217,7 +219,7 @@ static int check_olddelay(void)
}

for(i = handle->dbs_sync; i; i= i->next) {
-               pmdb_t *db = i->data;
+               Database *db = i->data;
if(db->gettimestamp(&tm) == -1) {
continue;
}
@@ -236,7 +238,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data)
pmlist_t *asked = NULL;
pmlist_t *i, *j, *k, *l, *m;
int ret = 0;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
@@ -615,7 +617,7 @@ int _pacman_sync_commit(pmtrans_t *trans, pmlist_t **data)
pmlist_t *i, *j;
pmtrans_t *tr = NULL;
int replaces = 0;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
@@ -781,12 +783,12 @@ int _pacman_trans_download_commit(pmtrans_t *trans, 
pmlist_t **data)
int done = 1;
for(i = handle->dbs_sync; i; i = i->next) {
struct stat buf;
-                       pmdb_t *current = i->data;
+                       Database *current = i->data;

for(j = trans->syncpkgs; j; j = j->next) {
pmsyncpkg_t *ps = j->data;
pmpkg_t *spkg = ps->pkg;
-                               pmdb_t *dbs = spkg->data;
+                               Database *dbs = spkg->data;

if(current == dbs) {
char filename[PATH_MAX];
@@ -801,7 +803,7 @@ int _pacman_trans_download_commit(pmtrans_t *trans, 
pmlist_t **data)
}
}

-                                               EVENT(trans, 
PM_TRANS_EVT_PRINTURI, pacman_db_getinfo(current, PM_DB_FIRSTSERVER), filename);
+                                               EVENT(trans, 
PM_TRANS_EVT_PRINTURI, pacman_db_getinfo(c_cast(current), PM_DB_FIRSTSERVER), 
filename);
} else {
if(stat(lcpath, &buf)) {
/* file is not in the cache dir, so add it to the list */
diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp
index fdf3ae2..1e61700 100644
--- a/lib/libpacman/trans.cpp
+++ b/lib/libpacman/trans.cpp
@@ -54,12 +54,14 @@
#include <stdlib.h>
#include <string.h>

+using namespace libpacman;
+
static
int _pacman_remove_commit(pmtrans_t *trans, pmlist_t **data);

static int check_oldcache(void)
{
-       pmdb_t *db = handle->db_local;
+       Database *db = handle->db_local;
time_t timestamp;

if(db->gettimestamp(&timestamp) == -1) {
@@ -272,7 +274,7 @@ pmsyncpkg_t *_pacman_trans_add(pmtrans_t *trans, 
pmsyncpkg_t *syncpkg, int flags
ASSERT(syncpkg->pkg != NULL || syncpkg->pkg_local != NULL, 
RET_ERR(PM_ERR_WRONG_ARGS, NULL));

if(syncpkg->pkg != NULL && syncpkg->pkg_local == NULL) {
-               pmdb_t *db_local = trans->handle->db_local;
+               Database *db_local = trans->handle->db_local;

syncpkg->pkg_local = _pacman_db_get_pkgfromcache(db_local, syncpkg->pkg->name);
}
@@ -305,7 +307,7 @@ pmsyncpkg_t *_pacman_trans_add_target(pmtrans_t *trans, 
const char *target, pmtr
}

static
-pmpkg_t *_pacman_filedb_load(pmdb_t *db, const char *name)
+pmpkg_t *_pacman_filedb_load(Database *db, const char *name)
{
struct stat buf;

@@ -322,7 +324,7 @@ static
int _pacman_remove_addtarget(pmtrans_t *trans, const char *name)
{
pmpkg_t *pkg_local;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
@@ -353,7 +355,7 @@ int _pacman_trans_addtarget(pmtrans_t *trans, const char 
*target)
{
pmlist_t *i;
pmpkg_t *pkg_new, *pkg_local, *pkg_queued = NULL;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

/* Sanity checks */
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
@@ -452,7 +454,7 @@ static
int _pacman_add_prepare(pmtrans_t *trans, pmlist_t **data)
{
pmlist_t *lp;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
@@ -552,7 +554,7 @@ static
int _pacman_remove_prepare(pmtrans_t *trans, pmlist_t **data)
{
pmlist_t *lp;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
@@ -654,7 +656,7 @@ int _pacman_fpmpackage_install(pmpkg_t *pkg, pmtranstype_t 
type, pmtrans_t *tran
double percent = 0;
struct archive *archive;
struct archive_entry *entry;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;
pmlist_t *lp;
char expath[PATH_MAX], cwd[PATH_MAX] = "";

@@ -1046,7 +1048,7 @@ int _pacman_add_commit(pmtrans_t *trans, pmlist_t **data)
unsigned char cb_state;
time_t t;
pmlist_t *targ, *lp;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
@@ -1264,7 +1266,7 @@ int _pacman_remove_commit(pmtrans_t *trans, pmlist_t 
**data)
pmpkg_t *pkg_local;
pmlist_t *targ, *lp;
int howmany, remain;
-       pmdb_t *db_local = trans->handle->db_local;
+       Database *db_local = trans->handle->db_local;

ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
diff --git a/lib/libpacman/trans_sysupgrade.cpp 
b/lib/libpacman/trans_sysupgrade.cpp
index a27f840..a9c3ac8 100644
--- a/lib/libpacman/trans_sysupgrade.cpp
+++ b/lib/libpacman/trans_sysupgrade.cpp
@@ -56,6 +56,8 @@

#include "sync.h"

+using namespace libpacman;
+
static int istoonew(pmpkg_t *pkg)
{
time_t t;
@@ -69,7 +71,7 @@ int _pacman_trans_sysupgrade(pmtrans_t *trans)
{
pmlist_t *i, *j, *k;
pmhandle_t *handle;
-       pmdb_t *db_local;
+       Database *db_local;
pmlist_t *dbs_sync;

/* Sanity checks */
@@ -98,7 +100,7 @@ int _pacman_trans_sysupgrade(pmtrans_t *trans)
} else {
/* get confirmation for the replacement */
int doreplace = 0;
-                                                       QUESTION(trans, 
PM_TRANS_CONV_REPLACE_PKG, lpkg, spkg, ((pmdb_t *)i->data)->treename, 
&doreplace);
+                                                       QUESTION(trans, 
PM_TRANS_CONV_REPLACE_PKG, lpkg, spkg, ((Database *)i->data)->treename, 
&doreplace);

if(doreplace) {
/* if confirmed, add this to the 'final' list, designating 'lpkg' as
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to