X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fopen.cc;h=06d079e4c589a9e084b0c1724ce13361722a505c;hb=eea258c0c9386a5eecae48a98b552113a3584a7d;hp=2d9c4365b2d38e3d60fee2364813a1f8f12c761f;hpb=39580e2d7fde7fbb1d837d49c0b3f675f706e123;p=notmuch diff --git a/lib/open.cc b/lib/open.cc index 2d9c4365..06d079e4 100644 --- a/lib/open.cc +++ b/lib/open.cc @@ -106,7 +106,7 @@ _load_key_file (const char *path, *key_file = g_key_file_new (); if (! g_key_file_load_from_file (*key_file, path, G_KEY_FILE_NONE, NULL)) { - status = NOTMUCH_STATUS_FILE_ERROR; + status = NOTMUCH_STATUS_NO_CONFIG; } DONE: @@ -114,6 +114,36 @@ DONE: return status; } +static notmuch_status_t +_choose_database_path (const char *config_path, + const char *profile, + GKeyFile **key_file, + const char **database_path, + char **message) +{ + notmuch_status_t status; + + status =_load_key_file (config_path, profile, key_file); + if (status) { + *message = strdup ("Error: cannot load config file.\n"); + return status; + } + + if (! *database_path && *key_file) + *database_path = g_key_file_get_value (*key_file, "database", "path", NULL); + + if (*database_path == NULL) { + *message = strdup ("Error: Cannot open a database for a NULL path.\n"); + return NOTMUCH_STATUS_NULL_POINTER; + } + + if (*database_path[0] != '/') { + *message = strdup ("Error: Database path must be absolute.\n"); + return NOTMUCH_STATUS_PATH_ERROR; + } + return NOTMUCH_STATUS_SUCCESS; +} + notmuch_status_t notmuch_database_open_with_config (const char *database_path, notmuch_database_mode_t mode, @@ -133,26 +163,8 @@ notmuch_database_open_with_config (const char *database_path, GKeyFile *key_file = NULL; static int initialized = 0; - status = _load_key_file (config_path, profile, &key_file); - if (status) { - message = strdup ("Error: cannot load config file"); - goto DONE; - } - - if (! database_path && key_file) - database_path = g_key_file_get_value (key_file, "database", "path", NULL); - - if (database_path == NULL) { - message = strdup ("Error: Cannot open a database for a NULL path.\n"); - status = NOTMUCH_STATUS_NULL_POINTER; - goto DONE; - } - - if (database_path[0] != '/') { - message = strdup ("Error: Database path must be absolute.\n"); - status = NOTMUCH_STATUS_PATH_ERROR; + if ((status = _choose_database_path (config_path, profile, &key_file, &database_path, &message))) goto DONE; - } if (! (notmuch_path = talloc_asprintf (local, "%s/%s", database_path, ".notmuch"))) { message = strdup ("Out of memory\n"); @@ -289,6 +301,10 @@ notmuch_database_open_with_config (const char *database_path, if (status) goto DONE; + status = _notmuch_config_load_defaults (notmuch); + if (status) + goto DONE; + status = _notmuch_database_setup_standard_query_fields (notmuch); if (status) goto DONE;