}
}
-notmuch_status_t
-notmuch_database_create (const char *path, notmuch_database_t **database)
-{
- char *status_string = NULL;
- notmuch_status_t status;
-
- status = notmuch_database_create_verbose (path, database,
- &status_string);
-
- if (status_string) {
- fputs (status_string, stderr);
- free (status_string);
- }
-
- return status;
-}
-
-notmuch_status_t
-notmuch_database_create_verbose (const char *path,
- notmuch_database_t **database,
- char **status_string)
-{
- notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
- notmuch_database_t *notmuch = NULL;
- char *notmuch_path = NULL;
- char *message = NULL;
- struct stat st;
- int err;
-
- if (path == NULL) {
- message = strdup ("Error: Cannot create a database for a NULL path.\n");
- status = NOTMUCH_STATUS_NULL_POINTER;
- goto DONE;
- }
-
- if (path[0] != '/') {
- message = strdup ("Error: Database path must be absolute.\n");
- status = NOTMUCH_STATUS_PATH_ERROR;
- goto DONE;
- }
-
- err = stat (path, &st);
- if (err) {
- IGNORE_RESULT (asprintf (&message, "Error: Cannot create database at %s: %s.\n",
- path, strerror (errno)));
- status = NOTMUCH_STATUS_FILE_ERROR;
- goto DONE;
- }
-
- if (! S_ISDIR (st.st_mode)) {
- IGNORE_RESULT (asprintf (&message, "Error: Cannot create database at %s: "
- "Not a directory.\n",
- path));
- status = NOTMUCH_STATUS_FILE_ERROR;
- goto DONE;
- }
-
- notmuch_path = talloc_asprintf (NULL, "%s/%s", path, ".notmuch");
-
- err = mkdir (notmuch_path, 0755);
-
- if (err) {
- IGNORE_RESULT (asprintf (&message, "Error: Cannot create directory %s: %s.\n",
- notmuch_path, strerror (errno)));
- status = NOTMUCH_STATUS_FILE_ERROR;
- goto DONE;
- }
-
- status = notmuch_database_open_verbose (path,
- NOTMUCH_DATABASE_MODE_READ_WRITE,
- ¬much, &message);
- if (status)
- goto DONE;
-
- /* Upgrade doesn't add these feature to existing databases, but
- * new databases have them. */
- notmuch->features |= NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES;
- notmuch->features |= NOTMUCH_FEATURE_INDEXED_MIMETYPES;
- notmuch->features |= NOTMUCH_FEATURE_UNPREFIX_BODY_ONLY;
-
- status = notmuch_database_upgrade (notmuch, NULL, NULL);
- if (status) {
- notmuch_database_close (notmuch);
- notmuch = NULL;
- }
-
- DONE:
- if (notmuch_path)
- talloc_free (notmuch_path);
-
- if (message) {
- if (status_string)
- *status_string = message;
- else
- free (message);
- }
- if (database)
- *database = notmuch;
- else
- talloc_free (notmuch);
- return status;
-}
-
notmuch_status_t
_notmuch_database_ensure_writable (notmuch_database_t *notmuch)
{