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
