aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2023-09-15 09:50:04 -0300
committerDavid Bremner <david@tethera.net>2023-09-23 08:34:48 -0300
commit1c10d91d8e4a3e5bc76ca4c6b9939f3759e6ef5e (patch)
tree1557dbddd672b2879f0c52ce6c4eef35538886b0 /lib
parentbc38580cef3316254b1ffb15b4711b541c6f9bb3 (diff)
Pass error message from GLib ini parser to CLI
The function _notmuch_config_load_from_file is only called in two places in open.cc. Update internal API to match the idiom in open.cc. Adding a newline is needed for consistency with other status strings. Based in part on a patch [1] from Eric Blake. [1]: id:20230906153402.101471-1-eblake@redhat.com
Diffstat (limited to 'lib')
-rw-r--r--lib/config.cc13
-rw-r--r--lib/notmuch-private.h2
-rw-r--r--lib/open.cc4
3 files changed, 14 insertions, 5 deletions
diff --git a/lib/config.cc b/lib/config.cc
index 2323860d..6cd15fab 100644
--- a/lib/config.cc
+++ b/lib/config.cc
@@ -416,7 +416,8 @@ _expand_path (void *ctx, const char *key, const char *val)
notmuch_status_t
_notmuch_config_load_from_file (notmuch_database_t *notmuch,
- GKeyFile *file)
+ GKeyFile *file,
+ char **status_string)
{
notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
gchar **groups = NULL, **keys, *val;
@@ -435,6 +436,7 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
for (gchar **keys_p = keys; *keys_p; keys_p++) {
char *absolute_key = talloc_asprintf (notmuch, "%s.%s", *grp, *keys_p);
char *normalized_val;
+ GError *gerr = NULL;
/* If we opened from a given path, do not overwrite it */
if (strcmp (absolute_key, "database.path") == 0 &&
@@ -442,7 +444,14 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
notmuch->xapian_db)
continue;
- val = g_key_file_get_string (file, *grp, *keys_p, NULL);
+ val = g_key_file_get_string (file, *grp, *keys_p, &gerr);
+ if (gerr) {
+ if (status_string)
+ IGNORE_RESULT (asprintf (status_string,
+ "GLib: %s\n",
+ gerr->message));
+ g_error_free (gerr);
+ }
if (! val) {
status = NOTMUCH_STATUS_FILE_ERROR;
goto DONE;
diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h
index c19ee8e2..367e23e6 100644
--- a/lib/notmuch-private.h
+++ b/lib/notmuch-private.h
@@ -726,7 +726,7 @@ notmuch_status_t
_notmuch_config_load_from_database (notmuch_database_t *db);
notmuch_status_t
-_notmuch_config_load_from_file (notmuch_database_t *db, GKeyFile *file);
+_notmuch_config_load_from_file (notmuch_database_t *db, GKeyFile *file, char **status_string);
notmuch_status_t
_notmuch_config_load_defaults (notmuch_database_t *db);
diff --git a/lib/open.cc b/lib/open.cc
index 54d1faf3..005872dc 100644
--- a/lib/open.cc
+++ b/lib/open.cc
@@ -555,7 +555,7 @@ _finish_open (notmuch_database_t *notmuch,
goto DONE;
if (key_file)
- status = _notmuch_config_load_from_file (notmuch, key_file);
+ status = _notmuch_config_load_from_file (notmuch, key_file, &message);
if (status)
goto DONE;
@@ -961,7 +961,7 @@ notmuch_database_load_config (const char *database_path,
}
if (key_file) {
- status = _notmuch_config_load_from_file (notmuch, key_file);
+ status = _notmuch_config_load_from_file (notmuch, key_file, &message);
if (status)
goto DONE;
}