#include "newdb.c"
int zpm_db_initialize(struct zpm *pkg) {
- //fprintf(stderr, "initializing zpm database\n");
char *error;
switch (sqlite3_exec(pkg->db, createdb, (int (*)(void *,int,char **,char **))0, NULL, &error)) {
case SQLITE_OK: break;
SQLERROR(sqlite3_errmsg(pkg->db));
fprintf(stderr, "error: %s\n", error);
sqlite3_free(error);
+ zpm_rollback(pkg);
return 0;
break;
}
return zpm;
}
+static void zpm_set_db_errmsg(struct zpm *zpm, const char *msg) {
+ if (zpm) {
+ if (zpm->dberrmsg) {
+ free(zpm->dberrmsg);
+ }
+ if (msg) {
+ zpm->dberrmsg = strdup(msg);
+ if (!zpm->dberrmsg) {
+ zpm->error = 1;
+ }
+ } else {
+ zpm->dberrmsg = 0;
+ }
+ }
+}
+
int zpm_init(struct zpm *pkg, char *path) {
int rc;
sqlite3 *db = 0;
rc = sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
if (rc) {
- SQLERROR(sqlite3_errmsg(db));
- sqlite3_close(db);
+ pkg->error = 1;
+ pkg->dbresult = rc;
+ zpm_set_db_errmsg(pkg, sqlite3_errstr(rc));
+ if (db) {
+ sqlite3_close(db);
+ }
+ fprintf(stderr, "error (%d): %s: %s\n", rc,
+ pkg->dberrmsg ? pkg->dberrmsg : "null", path);
+
return 0;
}
pkg->db = db;
int rc;
/* clear existing for this hash */
- if (!run_for_hash(db, "delete from elfinfo where file = ?", hash)) {
- SQLERP(db, "error clearing elf info");
- return 0;
- }
if (!run_for_hash(db, "delete from elflibraries where file = ?", hash)) {
SQLERP(db, "error clearing elf library");