sticker: use GError for error handling
This commit is contained in:
parent
12e82b9e33
commit
0c2ab17e91
@ -231,6 +231,8 @@ int main(int argc, char *argv[])
|
|||||||
Options options;
|
Options options;
|
||||||
clock_t start;
|
clock_t start;
|
||||||
bool create_db;
|
bool create_db;
|
||||||
|
bool success;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
daemonize_close_stdin();
|
daemonize_close_stdin();
|
||||||
|
|
||||||
@ -288,7 +290,10 @@ int main(int argc, char *argv[])
|
|||||||
create_db = !openDB(&options);
|
create_db = !openDB(&options);
|
||||||
|
|
||||||
#ifdef ENABLE_SQLITE
|
#ifdef ENABLE_SQLITE
|
||||||
sticker_global_init(config_get_path(CONF_STICKER_FILE));
|
success = sticker_global_init(config_get_path(CONF_STICKER_FILE),
|
||||||
|
&error);
|
||||||
|
if (!success)
|
||||||
|
g_error("%s", error->message);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
command_init();
|
command_init();
|
||||||
|
@ -72,50 +72,69 @@ static const char sticker_sql_create[] =
|
|||||||
static sqlite3 *sticker_db;
|
static sqlite3 *sticker_db;
|
||||||
static sqlite3_stmt *sticker_stmt[G_N_ELEMENTS(sticker_sql)];
|
static sqlite3_stmt *sticker_stmt[G_N_ELEMENTS(sticker_sql)];
|
||||||
|
|
||||||
|
static GQuark
|
||||||
|
sticker_quark(void)
|
||||||
|
{
|
||||||
|
return g_quark_from_static_string("sticker");
|
||||||
|
}
|
||||||
|
|
||||||
static sqlite3_stmt *
|
static sqlite3_stmt *
|
||||||
sticker_prepare(const char *sql)
|
sticker_prepare(const char *sql, GError **error_r)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
sqlite3_stmt *stmt;
|
sqlite3_stmt *stmt;
|
||||||
|
|
||||||
ret = sqlite3_prepare_v2(sticker_db, sql, -1, &stmt, NULL);
|
ret = sqlite3_prepare_v2(sticker_db, sql, -1, &stmt, NULL);
|
||||||
if (ret != SQLITE_OK)
|
if (ret != SQLITE_OK) {
|
||||||
g_error("sqlite3_prepare_v2() failed: %s",
|
g_set_error(error_r, sticker_quark(), ret,
|
||||||
|
"sqlite3_prepare_v2() failed: %s",
|
||||||
sqlite3_errmsg(sticker_db));
|
sqlite3_errmsg(sticker_db));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return stmt;
|
return stmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
sticker_global_init(const char *path)
|
sticker_global_init(const char *path, GError **error_r)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (path == NULL)
|
if (path == NULL)
|
||||||
/* not configured */
|
/* not configured */
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
/* open/create the sqlite database */
|
/* open/create the sqlite database */
|
||||||
|
|
||||||
ret = sqlite3_open(path, &sticker_db);
|
ret = sqlite3_open(path, &sticker_db);
|
||||||
if (ret != SQLITE_OK)
|
if (ret != SQLITE_OK) {
|
||||||
g_error("Failed to open sqlite database '%s': %s",
|
g_set_error(error_r, sticker_quark(), ret,
|
||||||
|
"Failed to open sqlite database '%s': %s",
|
||||||
path, sqlite3_errmsg(sticker_db));
|
path, sqlite3_errmsg(sticker_db));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* create the table and index */
|
/* create the table and index */
|
||||||
|
|
||||||
ret = sqlite3_exec(sticker_db, sticker_sql_create, NULL, NULL, NULL);
|
ret = sqlite3_exec(sticker_db, sticker_sql_create, NULL, NULL, NULL);
|
||||||
if (ret != SQLITE_OK)
|
if (ret != SQLITE_OK) {
|
||||||
g_error("Failed to create sticker table: %s",
|
g_set_error(error_r, sticker_quark(), ret,
|
||||||
|
"Failed to create sticker table: %s",
|
||||||
sqlite3_errmsg(sticker_db));
|
sqlite3_errmsg(sticker_db));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* prepare the statements we're going to use */
|
/* prepare the statements we're going to use */
|
||||||
|
|
||||||
for (unsigned i = 0; i < G_N_ELEMENTS(sticker_sql); ++i) {
|
for (unsigned i = 0; i < G_N_ELEMENTS(sticker_sql); ++i) {
|
||||||
assert(sticker_sql[i] != NULL);
|
assert(sticker_sql[i] != NULL);
|
||||||
|
|
||||||
sticker_stmt[i] = sticker_prepare(sticker_sql[i]);
|
sticker_stmt[i] = sticker_prepare(sticker_sql[i], error_r);
|
||||||
|
if (sticker_stmt[i] == NULL)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -50,9 +50,13 @@ struct sticker;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens the sticker database (if path is not NULL).
|
* Opens the sticker database (if path is not NULL).
|
||||||
|
*
|
||||||
|
* @param error_r location to store the error occuring, or NULL to
|
||||||
|
* ignore errors
|
||||||
|
* @return true on success, false on error
|
||||||
*/
|
*/
|
||||||
void
|
bool
|
||||||
sticker_global_init(const char *path);
|
sticker_global_init(const char *path, GError **error_r);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close the sticker database.
|
* Close the sticker database.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user