Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Merge branch 'master' of github.com:pkgng/pkgng
Baptiste Daroussin committed 14 years ago
commit 8948afd9d2cb2431372e8593b0eed8c834b92859
parent aff4754
10 files changed +46 -40
modified libpkg/pkg.h
@@ -371,7 +371,7 @@ int pkg_finish_repo(char *patj, pem_password_cb *cb, char *rsa_key_path);
 * The db must be free'ed with pkgdb_close().
 * @return An error code.
 */
-
int pkgdb_open(struct pkgdb **db, pkgdb_t remote, int mode);
+
int pkgdb_open(struct pkgdb **db, pkgdb_t type);

/**
 * Close and free the struct pkgdb.
modified libpkg/pkgdb.c
@@ -240,51 +240,49 @@ pkgdb_init(sqlite3 *sdb)
}

int
-
pkgdb_open(struct pkgdb **db, pkgdb_t remote, int mode)
+
pkgdb_open(struct pkgdb **db, pkgdb_t type)
{
	int retcode;
-
	struct stat st;
	char *errmsg;
	char localpath[MAXPATHLEN];
	char remotepath[MAXPATHLEN];
	char sql[BUFSIZ];
	const char *dbdir;

-
	/* First check to make sure PKG_DBDIR exists before trying to use it */
	dbdir = pkg_config("PKG_DBDIR");
-
	if (eaccess(dbdir, mode) == -1)
-
		return (pkg_error_set(EPKG_FATAL, "Package database directory "
-
		    "%s error: %s", dbdir, strerror(errno)));
-

-
	snprintf(localpath, sizeof(localpath), "%s/local.sqlite", dbdir);

	if ((*db = calloc(1, sizeof(struct pkgdb))) == NULL)
		return (pkg_error_set(EPKG_FATAL, "calloc(): %s", strerror(errno)));

-
	(*db)->remote = remote;
-

-
	retcode = stat(localpath, &st);
-
	if (retcode == -1 && errno != ENOENT)
-
		return (pkg_error_set(EPKG_FATAL, "can not stat %s: %s", localpath,
-
							  strerror(errno)));
+
	(*db)->type = type;

-
	if (remote == PKGDB_REMOTE) {
-
		snprintf(remotepath, sizeof(localpath), "%s/repo.sqlite", dbdir);
-
		retcode = stat(remotepath, &st);
-
		if (retcode == -1 && errno != ENOENT)
-
			return (pkg_error_set(EPKG_FATAL, "can not stat %s: %s", remotepath,
-
						strerror(errno)));
+
	snprintf(localpath, sizeof(localpath), "%s/local.sqlite", dbdir);
+
	retcode = access(localpath, R_OK);
+
	if (retcode == -1) {
+
		if (errno != ENOENT)
+
			return (pkg_error_set(EPKG_FATAL, "%s: %s", localpath,
+
								  strerror(errno)));
+
		else if (eaccess(dbdir, W_OK) != 0)
+
			return (pkg_error_set(EPKG_FATAL, "can not initialize database in "
+
								 "%s: %s", dbdir, strerror(errno)));
	}

	if (sqlite3_open(localpath, &(*db)->sqlite) != SQLITE_OK)
		return (ERROR_SQLITE((*db)->sqlite));

-
	if (remote == PKGDB_REMOTE) {
-
		sqlite3_snprintf(BUFSIZ, sql, "ATTACH \"%s\" as remote;", remotepath);
+
	if (type == PKGDB_REMOTE) {
+
		snprintf(remotepath, sizeof(remotepath), "%s/repo.sqlite", dbdir);
+

+
		if (access(remotepath, R_OK) != 0)
+
			return (pkg_error_set(EPKG_FATAL, "repo.sqlite: %s",
+
								  strerror(errno)));

-
		if (sqlite3_exec((*db)->sqlite, sql, NULL, NULL, &errmsg) != SQLITE_OK){
+
		sqlite3_snprintf(sizeof(sql), sql, "ATTACH \"%s\" as remote;", remotepath);
+

+
		if (sqlite3_exec((*db)->sqlite, sql, NULL, NULL, &errmsg) != SQLITE_OK) {
+
			pkg_error_set(EPKG_FATAL, "%s", errmsg);
			sqlite3_free(errmsg);
-
			return ERROR_SQLITE((*db)->sqlite);
+
			return (EPKG_FATAL);
		}
	}

@@ -323,7 +321,7 @@ pkgdb_close(struct pkgdb *db)
		return;

	if (db->sqlite != NULL) {
-
		if (db->remote == PKGDB_REMOTE)
+
		if (db->type == PKGDB_REMOTE)
			sqlite3_exec(db->sqlite, "DETACH remote;", NULL, NULL, NULL);

		sqlite3_close(db->sqlite);
@@ -1271,11 +1269,13 @@ pkgdb_query_nv(struct pkgdb *db, char *name)
struct pkgdb_it *
pkgdb_query_upgrades(struct pkgdb *db)
{
-
	if (db->remote != PKGDB_REMOTE)
-
		return (NULL);
-

	sqlite3_stmt *stmt;

+
	if (db->type != PKGDB_REMOTE) {
+
		pkg_error_set(EPKG_FATAL, "remote database not attached");
+
		return (NULL);
+
	}
+

	const char sql[] = ""
		"SELECT l.id, l.origin, l.name, l.version, l.comment, l.desc, "
		"l.message, l.arch, l.osversion, l.maintainer, "
@@ -1285,8 +1285,10 @@ pkgdb_query_upgrades(struct pkgdb *db)
		"WHERE l.origin = r.origin "
		"AND PKGLT(l.version, r.version)";

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK)
+
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
+
		ERROR_SQLITE(db->sqlite);
		return (NULL);
+
	}

	return (pkgdb_it_new(db, stmt, IT_UPGRADE));
}
@@ -1297,8 +1299,10 @@ pkgdb_query_downgrades(struct pkgdb *db)

	sqlite3_stmt *stmt;

-
	if (db->remote != PKGDB_REMOTE)
+
	if (db->type != PKGDB_REMOTE) {
+
		pkg_error_set(EPKG_FATAL, "remote database not attached");
		return (NULL);
+
	}

	const char sql[] = ""
		"SELECT l.id, l.origin, l.name, l.version, l.comment, l.desc, "
@@ -1309,8 +1313,10 @@ pkgdb_query_downgrades(struct pkgdb *db)
		"WHERE l.origin = r.origin "
		"AND PKGGT(l.version, r.version)";

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK)
+
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
+
		ERROR_SQLITE(db->sqlite);
		return (NULL);
+
	}

	return (pkgdb_it_new(db, stmt, IT_UPGRADE));
}
modified libpkg/pkgdb.h
@@ -8,7 +8,7 @@
struct pkgdb {
	uint64_t flags;
	sqlite3 *sqlite;
-
	pkgdb_t remote;
+
	pkgdb_t type;
};

#define IT_LOCAL 0
modified pkg/add.c
@@ -67,7 +67,7 @@ exec_add(int argc, char **argv)
		return (EX_NOPERM);
	}

-
	if (pkgdb_open(&db, PKGDB_DEFAULT, R_OK|W_OK) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkg_error_warn("can not open database");
		return (1);
	}
modified pkg/create.c
@@ -29,7 +29,7 @@ pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt, const
					  PKG_LOAD_SCRIPTS | PKG_LOAD_OPTIONS |
					  PKG_LOAD_MTREE;

-
	if (pkgdb_open(&db, PKGDB_DEFAULT, R_OK) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkg_error_warn("can not open database");
		pkgdb_close(db);
		return (-1);
modified pkg/delete.c
@@ -55,7 +55,7 @@ exec_delete(int argc, char **argv)
		return (EX_NOPERM);
	}
	
-
	if (pkgdb_open(&db, PKGDB_DEFAULT, R_OK|W_OK) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkg_error_warn("can not open database");
		pkgdb_close(db);
		return (-1);
modified pkg/info.c
@@ -169,7 +169,7 @@ exec_info(int argc, char **argv)
	if (argc == 0)
		match = MATCH_ALL;

-
	if (pkgdb_open(&db, PKGDB_DEFAULT, R_OK) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkg_error_warn("can not open database");
		return (-1);
	}
modified pkg/register.c
@@ -187,7 +187,7 @@ exec_register(int argc, char **argv)
	if (plist != NULL)
		free(plist);

-
	if (pkgdb_open(&db, PKGDB_DEFAULT, R_OK|W_OK) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkg_error_warn("can not open database");
		return (-1);
	}
modified pkg/upgrade.c
@@ -43,7 +43,7 @@ exec_upgrade(int argc, char **argv)
		return (EX_NOPERM);
	}

-
	if (pkgdb_open(&db, PKGDB_REMOTE, R_OK|W_OK) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
		pkg_error_warn("can not open database");
		return (1);
	}
modified pkg/which.c
@@ -34,7 +34,7 @@ exec_which(int argc, char **argv)
		return (EX_USAGE);
	}

-
	if (pkgdb_open(&db, PKGDB_DEFAULT, R_OK) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkg_error_warn("can not open database");
		pkgdb_close(db);
		return (-1);