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

commit 5f35dc8b253604f5d016e7b318c7fe2bd4580b2f
Author: Michel Hermier <[email protected]>
Date:   Sun Apr 27 10:26:08 2014 +0200

libpacman: More libpacman::Database methodifications.

diff --git a/lib/libpacman/db.cpp b/lib/libpacman/db.cpp
index ad20341..ff0e60b 100644
--- a/lib/libpacman/db.cpp
+++ b/lib/libpacman/db.cpp
@@ -130,29 +130,20 @@ 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 Database::close()
-{
-       return ops->close(this);
+       return open(flags, &cache_timestamp);
}

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

-       if(ops->gettimestamp) {
-               return ops->gettimestamp(this, timestamp);
-       } else {
-               char buffer[PM_FMT_MDTM_MAX];
+       char buffer[PM_FMT_MDTM_MAX];

-               if(_pacman_db_getlastupdate(this, buffer) == 0 &&
-                       _pacman_ftp_strpmdtm(buffer, timestamp) != NULL) {
-                       return 0;
-               }
-               return -1;
+       if(_pacman_db_getlastupdate(this, buffer) == 0 &&
+               _pacman_ftp_strpmdtm(buffer, timestamp) != NULL) {
+               return 0;
}
+       return -1;
}

/* A NULL timestamp means now per f_localtime definition.
diff --git a/lib/libpacman/db.h b/lib/libpacman/db.h
index 3149cc2..ac7f350 100644
--- a/lib/libpacman/db.h
+++ b/lib/libpacman/db.h
@@ -46,11 +46,6 @@ class Database;
typedef struct __pmdb_ops_t pmdb_ops_t;

struct __pmdb_ops_t {
-       int (*open)(libpacman::Database *db, int flags, time_t *timestamp);
-       int (*close)(libpacman::Database *db);
-
-       int (*gettimestamp)(libpacman::Database *db, time_t *timestamp);
-
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 */
@@ -67,8 +62,8 @@ class Database
/* Prototypes for backends functions */
virtual pmlist_t *test() const;

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

virtual int gettimestamp(time_t *timestamp);
virtual int settimestamp(const time_t *timestamp);
@@ -96,6 +91,8 @@ class Database
protected:
Database(pmhandle_t *handle, const char *treename, const pmdb_ops_t *ops);

+       virtual int open(int flags, time_t *timestamp) = 0;
+
private:
const pmdb_ops_t *ops;
};
diff --git a/lib/libpacman/db/localdb.cpp b/lib/libpacman/db/localdb.cpp
index 19a349a..5405f33 100644
--- a/lib/libpacman/db/localdb.cpp
+++ b/lib/libpacman/db/localdb.cpp
@@ -203,30 +203,28 @@ pmlist_t *LocalDatabase::test() const
return(ret);
}

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

/* make sure the database directory exists */
-       if(stat(db->path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
-               _pacman_log(PM_LOG_FLOW1, _("database directory '%s' does not 
exist -- try creating it"), db->path);
-               if(_pacman_makepath(db->path) != 0) {
+       if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
+               _pacman_log(PM_LOG_FLOW1, _("database directory '%s' does not 
exist -- try creating it"), path);
+               if(_pacman_makepath(path) != 0) {
RET_ERR(PM_ERR_SYSTEM, -1);
}
}
-       db->handle = opendir(db->path);
-       ASSERT(db->handle != NULL, RET_ERR(PM_ERR_DB_OPEN, -1));
-       db->gettimestamp(timestamp);
+       handle = opendir(path);
+       ASSERT(handle != NULL, RET_ERR(PM_ERR_DB_OPEN, -1));
+       gettimestamp(timestamp);
return 0;
}

-static
-int _pacman_localdb_close(Database *db)
+int LocalDatabase::close()
{
-       if(db->handle) {
-               closedir(db->handle);
-               db->handle = NULL;
+       if(handle) {
+               closedir(handle);
+               handle = NULL;
}
return 0;
}
@@ -500,9 +498,6 @@ int _pacman_localdb_remove(Database *db, pmpkg_t *info)
}

const pmdb_ops_t _pacman_localdb_ops = {
-       .open = _pacman_localdb_open,
-       .close = _pacman_localdb_close,
-       .gettimestamp = NULL,
.read = _pacman_localdb_read,
.write = _pacman_localdb_write,
.remove = _pacman_localdb_remove,
diff --git a/lib/libpacman/db/localdb.h b/lib/libpacman/db/localdb.h
index 7498dfe..8fcd6d9 100644
--- a/lib/libpacman/db/localdb.h
+++ b/lib/libpacman/db/localdb.h
@@ -39,9 +39,14 @@ public:

virtual pmlist_t *test() const;

+       virtual int close();
+
virtual int rewind();
virtual pmpkg_t *readpkg(unsigned int inforeq);
virtual pmpkg_t *scan(const char *target, unsigned int inforeq);
+
+protected:
+       virtual int open(int flags, time_t *timestamp);
};

class LocalPackage
diff --git a/lib/libpacman/db/syncdb.cpp b/lib/libpacman/db/syncdb.cpp
index 28cb608..1516d87 100644
--- a/lib/libpacman/db/syncdb.cpp
+++ b/lib/libpacman/db/syncdb.cpp
@@ -200,42 +200,40 @@ int _pacman_syncdb_update(Database *db, int force)
return 0;
}

-static
-int _pacman_syncdb_open(Database *db, int flags, time_t *timestamp)
+int SyncDatabase::open(int flags, time_t *timestamp)
{
struct stat buf;
char dbpath[PATH_MAX];

-       snprintf(dbpath, PATH_MAX, "%s" PM_EXT_DB, db->path);
+       snprintf(dbpath, PATH_MAX, "%s" PM_EXT_DB, path);
if(stat(dbpath, &buf) != 0) {
// db is not there, we'll open it later
-               db->handle = NULL;
+               handle = NULL;
return 0;
}
-       if((db->handle = _pacman_archive_read_open_all_file(dbpath)) == NULL) {
+       if((handle = _pacman_archive_read_open_all_file(dbpath)) == NULL) {
//return 0 here to be able to update the damaged db with pacman -Syy
RET_ERR(PM_ERR_DB_OPEN, 0);
}
if(timestamp != NULL) {
-               db->gettimestamp(timestamp);
+               gettimestamp(timestamp);
}
return 0;
}

-static
-int _pacman_syncdb_close(Database *db)
+int SyncDatabase::close()
{
-       if(db->handle) {
-               archive_read_finish(db->handle);
-               db->handle = NULL;
+       if(handle) {
+               archive_read_finish(handle);
+               handle = NULL;
}
return 0;
}

int SyncDatabase::rewind()
{
-       _pacman_syncdb_close(this);
-       return _pacman_syncdb_open(this, 0, NULL);
+       close();
+       return open(0, NULL);
}

pmpkg_t *SyncDatabase::readpkg(unsigned int inforeq)
@@ -341,9 +339,6 @@ int _pacman_syncdb_read(Database *db, pmpkg_t *info, 
unsigned int inforeq)
}

const pmdb_ops_t _pacman_syncdb_ops = {
-       .open = _pacman_syncdb_open,
-       .close = _pacman_syncdb_close,
-       .gettimestamp = NULL,
.read = _pacman_syncdb_read,
.write = NULL,
.remove = NULL,
diff --git a/lib/libpacman/db/syncdb.h b/lib/libpacman/db/syncdb.h
index 907781a..c71dbcb 100644
--- a/lib/libpacman/db/syncdb.h
+++ b/lib/libpacman/db/syncdb.h
@@ -39,9 +39,14 @@ public:
SyncDatabase(pmhandle_t *handle, const char *treename);
virtual ~SyncDatabase();

+       virtual int close();
+
virtual int rewind();
virtual pmpkg_t *readpkg(unsigned int inforeq);
virtual pmpkg_t *scan(const char *target, unsigned int inforeq);
+
+protected:
+       virtual int open(int flags, time_t *timestamp);
};

class SyncPackage
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to