Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=e0c4827f5ad09426fa5365b867a66d697ebd16f3
commit e0c4827f5ad09426fa5365b867a66d697ebd16f3 Author: Michel Hermier <[email protected]> Date: Fri Aug 15 09:08:35 2014 +0200 libpacman: Allow client to get a database handle by its name. diff --git a/doc/libpacman-changes.txt b/doc/libpacman-changes.txt index 01a6e83..b4219a9 100644 --- a/doc/libpacman-changes.txt +++ b/doc/libpacman-changes.txt @@ -20,6 +20,8 @@ None. pacman_cb_log: Make 'message' argument a constant. +pacman_handle_get_database: Get a database handle by its name. + pacman_logaction: Now returns a void instead of a int to reflect success. Logging should allways success and not be intrusive. pacman_parse_config: Make 'file' argument a constant. Remove 'this_section' argument, it is internal and should not have been exposed publicly. @@ -112,6 +114,8 @@ PM_TRANS: Unused in the public API. === Behaviour changes +pacman_db_register: Do not fails anymore trying to register 'local' again, it will output the same warning as other db and will return the local handle. + pacman_db_unregister: Was accepting any database as long as it has a correct treename. Now it only accept valid database pointers. Previous behaviour, if necessary, should be implemented with a pacman_db_unregister_by_name API entry. == AUTHORS diff --git a/lib/libpacman/handle.cpp b/lib/libpacman/handle.cpp index fe8aec8..931ca80 100644 --- a/lib/libpacman/handle.cpp +++ b/lib/libpacman/handle.cpp @@ -139,20 +139,9 @@ Database *Handle::createDatabase(const char *treename, pacman_cb_db_register cal { Database *db; - if(strcmp(treename, "local") == 0) { - if(db_local != NULL) { - _pacman_log(PM_LOG_WARNING, _("attempt to re-register the 'local' DB\n")); - RET_ERR(PM_ERR_DB_NOT_NULL, NULL); - } - } else { - pmlist_t *i; - for(i = dbs_sync; i; i = i->next) { - 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; - } - } + if((db = getDatabase(treename)) != NULL) { + _pacman_log(PM_LOG_WARNING, _("attempt to re-register the '%s' database, using existing\n"), db->treename); + return db; } _pacman_log(PM_LOG_FLOW1, _("registering database '%s'"), treename); @@ -179,5 +168,23 @@ Database *Handle::createDatabase(const char *treename, pacman_cb_db_register cal return(db); } +Database *Handle::getDatabase(const char *treename) +{ + pmlist_t *i; + + if(strcmp(treename, "local") == 0) { + return db_local; + } + + for(i = dbs_sync; i; i = i->next) { + Database *sdb = (Database *)i->data; + if(strcmp(treename, sdb->treename) == 0) { + return sdb; + } + } + + return NULL; +} + /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libpacman/handle.h b/lib/libpacman/handle.h index 3dfd6d2..6a26179 100644 --- a/lib/libpacman/handle.h +++ b/lib/libpacman/handle.h @@ -57,6 +57,7 @@ public: int unlock(); libpacman::Database *createDatabase(const char *treename, pacman_cb_db_register callback); + libpacman::Database *getDatabase(const char *treename); pmaccess_t access; uid_t uid; diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp index ed8dbcd..42203ed 100644 --- a/lib/libpacman/pacman.cpp +++ b/lib/libpacman/pacman.cpp @@ -149,6 +149,14 @@ pmtrans_t *pacman_get_trans(void) return handle->trans; } + +pmdb_t *pacman_handle_get_database(pmhandle_t *handle, const char *treename) +{ + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, NULL)); + + return c_cast(cxx_cast(handle)->getDatabase(treename)); +} + /** @} */ /** @defgroup pacman_options Library Options diff --git a/lib/libpacman/pacman.h b/lib/libpacman/pacman.h index 546e5ee..63f9814 100644 --- a/lib/libpacman/pacman.h +++ b/lib/libpacman/pacman.h @@ -70,6 +70,8 @@ int pacman_release(void); pmhandle_t *pacman_get_handle(void); pmtrans_t *pacman_get_trans(void); +pmdb_t *pacman_handle_get_database(pmhandle_t *handle, const char *treename); + /* * Logging facilities */ _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
