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

Reply via email to