From: Nathan Wagner Date: Sun, 30 Sep 2018 15:27:37 +0000 (+0000) Subject: cleanup error handling in zpm_init X-Git-Tag: v0.2.0~14 X-Git-Url: https://pd.if.org/git/?p=zpackage;a=commitdiff_plain;h=94119dbdd3030415abee60b3946193082239e936 cleanup error handling in zpm_init --- diff --git a/lib/zpm.c b/lib/zpm.c index 6827caf..30e8dc8 100644 --- a/lib/zpm.c +++ b/lib/zpm.c @@ -323,6 +323,20 @@ struct zpm *zpm_clearmem(struct zpm *zpm) { 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; + } + } + } +} + int zpm_init(struct zpm *pkg, char *path) { int rc; sqlite3 *db = 0; @@ -336,8 +350,15 @@ int zpm_init(struct zpm *pkg, char *path) { 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, path); + return 0; } pkg->db = db; diff --git a/zpm.h b/zpm.h index 6b8b469..08ae23b 100644 --- a/zpm.h +++ b/zpm.h @@ -31,6 +31,8 @@ struct zpm { sqlite3 *db; char *path; /* path to db file */ int error; + int dbresult; + char *dberrmsg; char *errmsg; char *pkgid; struct zpm_package *current_package;