From: Stefan Schubert Date: Wed, 21 Feb 2024 12:09:52 +0000 (+0100) Subject: liblastlog2: Improved sqlite3 error handling X-Git-Tag: v2.42-start~518^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3d4ce545f2563f5dde88e7bd50ef4944a65112db;p=thirdparty%2Futil-linux.git liblastlog2: Improved sqlite3 error handling --- diff --git a/liblastlog2/src/lastlog2.c b/liblastlog2/src/lastlog2.c index 744d41f1a..cafcb017e 100644 --- a/liblastlog2/src/lastlog2.c +++ b/liblastlog2/src/lastlog2.c @@ -185,10 +185,17 @@ read_entry(sqlite3 *db, const char *user, goto out_read_entry; } } - } else { + } else if (step == SQLITE_DONE) { + retval = -ENOENT; + } else if (step == SQLITE_BUSY) { retval = -1; if (error) - if (asprintf(error, "User '%s' not found (%d)", user, step) < 0) + if ((*error = strdup ("Database busy")) == NULL) + retval = -ENOMEM; + } else if (step == SQLITE_ERROR) { + retval = -1; + if (error) + if (asprintf (error, "Error stepping through database: %s", sqlite3_errmsg (db)) < 0) retval = -ENOMEM; } @@ -298,11 +305,17 @@ write_entry(sqlite3 *db, const char *user, if (step != SQLITE_DONE) { retval = -1; - if (error) - if (asprintf(error, "Delete statement did not return SQLITE_DONE: %d", - step) < 0) - retval = -ENOMEM; - goto out_ll2_read_entry; + if (error) { + if (step == SQLITE_ERROR) { + if (asprintf (error, "Delete statement failed: %s", + sqlite3_errmsg (db)) < 0) + retval = -ENOMEM; + } else { + if (asprintf (error, "Delete statement did not return SQLITE_DONE: %d", + step) < 0) + retval = -ENOMEM; + } + } } out_ll2_read_entry: if (res) @@ -448,10 +461,17 @@ remove_entry(sqlite3 *db, const char *user, char **error) if (step != SQLITE_DONE) { retval = -1; - if (error) - if (asprintf(error, "Delete statement did not return SQLITE_DONE: %d", - step) < 0) - retval = -ENOMEM; + if (error) { + if (step == SQLITE_ERROR) { + if (asprintf (error, "Delete statement failed: %s", + sqlite3_errmsg (db)) < 0) + retval = -ENOMEM; + } else { + if (asprintf (error, "Delete statement did not return SQLITE_DONE: %d", + step) < 0) + retval = -ENOMEM; + } + } } out_remove_entry: if (res)