Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Aug 2013 10:05:28 GMT
From:      mattbw@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r255726 - soc2013/mattbw/backend
Message-ID:  <201308091005.r79A5SQF064612@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308091005.r79A5SQF064612>