socsvn commit: r255726 - soc2013/mattbw/backend
mattbw at FreeBSD.org
mattbw at FreeBSD.org
Fri Aug 9 10:05:28 UTC 2013
Author: mattbw
Date: Fri Aug 9 10:05:28 2013
New Revision: 255726
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=255726
Log:
Clean up db_open_remote.
Now split into two auxiliary functions and no longer needs a goto!
Modified:
soc2013/mattbw/backend/db.c
Modified: soc2013/mattbw/backend/db.c
==============================================================================
--- soc2013/mattbw/backend/db.c Fri Aug 9 09:48:05 2013 (r255725)
+++ soc2013/mattbw/backend/db.c Fri Aug 9 10:05:28 2013 (r255726)
@@ -19,8 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <string.h>
-#include <glib.h>
+#include <assert.h> /* assert */
#include "pk-backend.h"
#include "pkg.h"
@@ -32,6 +31,9 @@
static const unsigned int ACCESS_DB = (unsigned int)(PKGDB_DB_LOCAL |
PKGDB_DB_REPO);
+static bool has_remote_access(PkBackend *backend);
+static struct pkgdb *open_remote_direct(PkBackend *backend);
+
/*
* Opens a pkgdb ready for remote operations. This will always return TRUE if
* and only if a database ready for use is now pointed to by *db, and FALSE
@@ -45,41 +47,56 @@
struct pkgdb *
db_open_remote(PkBackend *backend)
{
- bool success;
+ bool has_access;
struct pkgdb *db;
- success = FALSE;
+ assert(backend != NULL);
+
db = NULL;
- (void)pk_backend_set_status(backend, PK_STATUS_ENUM_WAITING_FOR_AUTH);
- if (pkgdb_access(ACCESS_MODE, ACCESS_DB) != EPKG_OK) {
- (void)pk_backend_error_code(backend,
+ has_access = has_remote_access(backend);
+ if (has_access) {
+ db = open_remote_direct(backend);
+ }
+
+ return db;
+}
+
+static bool
+has_remote_access(PkBackend *backend)
+{
+ int err;
+
+ assert(backend != NULL);
+
+ err = pkgdb_access(ACCESS_MODE, ACCESS_DB);
+ if (err != EPKG_OK) {
+ ERR(backend,
PK_ERROR_ENUM_NOT_AUTHORIZED,
"cannot access database");
- goto cleanup;
}
- (void)pk_backend_set_status(backend, PK_STATUS_ENUM_WAITING_FOR_LOCK);
- if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
+
+ return (err == EPKG_OK);
+}
+
+static struct pkgdb *
+open_remote_direct(PkBackend *backend)
+{
+ int err;
+ struct pkgdb *db;
+
+ assert(backend != NULL);
+
+ db = NULL;
+ err = pkgdb_open(&db, PKGDB_REMOTE);
+ if (err != EPKG_OK) {
(void)pk_backend_error_code(backend,
PK_ERROR_ENUM_CANNOT_GET_LOCK,
"cannot open database");
- goto cleanup;
- }
- if (db == NULL) {
- (void)pk_backend_error_code(backend,
- PK_ERROR_ENUM_INTERNAL_ERROR,
- "pkgdb_open gave us a null pointer");
- goto cleanup;
}
- (void)pk_backend_set_status(backend, PK_STATUS_ENUM_RUNNING);
- success = true;
-
-cleanup:
- if (success == false) {
- pkgdb_close(db);
- db = NULL;
- }
+ assert (err == EPKG_OK || backend == NULL);
+ assert (err != EPKG_OK || backend != NULL);
return db;
}
More information about the svn-soc-all
mailing list