aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/database.cc
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@MIT.EDU>2012-04-30 12:25:34 -0400
committerGravatar David Bremner <bremner@debian.org>2012-05-05 10:12:26 -0300
commitba5729421825e0ec9d38aa9d656553f329aa6f09 (patch)
tree70986a01237436403048962d2e1728c4998c9067 /lib/database.cc
parent5fddc07dc31481453c1af186bf7da241c00cdbf1 (diff)
lib/cli: Make notmuch_database_create return a status code
This is the notmuch_database_create equivalent of the previous change. In this case, there were places where errors were not being propagated correctly in notmuch_database_create or in calls to it. These have been fixed, using the new status value.
Diffstat (limited to 'lib/database.cc')
-rw-r--r--lib/database.cc29
1 files changed, 22 insertions, 7 deletions
diff --git a/lib/database.cc b/lib/database.cc
index 1e665992..07f186ed 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -520,9 +520,10 @@ parse_references (void *ctx,
}
}
-notmuch_database_t *
-notmuch_database_create (const char *path)
+notmuch_status_t
+notmuch_database_create (const char *path, notmuch_database_t **database)
{
+ notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
notmuch_database_t *notmuch = NULL;
char *notmuch_path = NULL;
struct stat st;
@@ -530,6 +531,7 @@ notmuch_database_create (const char *path)
if (path == NULL) {
fprintf (stderr, "Error: Cannot create a database for a NULL path.\n");
+ status = NOTMUCH_STATUS_NULL_POINTER;
goto DONE;
}
@@ -537,12 +539,14 @@ notmuch_database_create (const char *path)
if (err) {
fprintf (stderr, "Error: Cannot create database at %s: %s.\n",
path, strerror (errno));
+ status = NOTMUCH_STATUS_FILE_ERROR;
goto DONE;
}
if (! S_ISDIR (st.st_mode)) {
fprintf (stderr, "Error: Cannot create database at %s: Not a directory.\n",
path);
+ status = NOTMUCH_STATUS_FILE_ERROR;
goto DONE;
}
@@ -553,19 +557,30 @@ notmuch_database_create (const char *path)
if (err) {
fprintf (stderr, "Error: Cannot create directory %s: %s.\n",
notmuch_path, strerror (errno));
+ status = NOTMUCH_STATUS_FILE_ERROR;
goto DONE;
}
- notmuch_database_open (path,
- NOTMUCH_DATABASE_MODE_READ_WRITE,
- &notmuch);
- notmuch_database_upgrade (notmuch, NULL, NULL);
+ status = notmuch_database_open (path,
+ NOTMUCH_DATABASE_MODE_READ_WRITE,
+ &notmuch);
+ if (status)
+ goto DONE;
+ status = notmuch_database_upgrade (notmuch, NULL, NULL);
+ if (status) {
+ notmuch_database_close(notmuch);
+ notmuch = NULL;
+ }
DONE:
if (notmuch_path)
talloc_free (notmuch_path);
- return notmuch;
+ if (database)
+ *database = notmuch;
+ else
+ talloc_free (notmuch);
+ return status;
}
notmuch_status_t