From 1c10d91d8e4a3e5bc76ca4c6b9939f3759e6ef5e Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 15 Sep 2023 09:50:04 -0300 Subject: [PATCH] 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 --- lib/config.cc | 13 +++++++++++-- lib/notmuch-private.h | 2 +- lib/open.cc | 4 ++-- notmuch.c | 6 ++++++ test/T030-config.sh | 1 - 5 files changed, 20 insertions(+), 6 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; } diff --git a/notmuch.c b/notmuch.c index 69a18131..814b9e42 100644 --- a/notmuch.c +++ b/notmuch.c @@ -563,6 +563,12 @@ main (int argc, char *argv[]) NULL, ¬much, &status_string); + if (status_string) { + fputs (status_string, stderr); + free (status_string); + status_string = NULL; + } + switch (status) { case NOTMUCH_STATUS_NO_CONFIG: if (! (command->mode & NOTMUCH_COMMAND_CONFIG_CREATE)) { diff --git a/test/T030-config.sh b/test/T030-config.sh index 636b5a53..621e0b69 100755 --- a/test/T030-config.sh +++ b/test/T030-config.sh @@ -201,7 +201,6 @@ printf '[query]\nq3=from:\xff\n' >>bad-config test_expect_code 1 "notmuch --config=./bad-config config list" test_begin_subtest "Specific error message about bad utf8" -test_subtest_known_broken notmuch --config=./bad-config config list 2>ERRORS cat < EXPECTED GLib: Key file contains key “q3” with value “from:�” which is not UTF-8 -- 2.45.2