mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
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.
This commit is contained in:
parent
5fddc07dc3
commit
ba57294218
3 changed files with 42 additions and 12 deletions
|
@ -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,
|
||||
¬much);
|
||||
notmuch_database_upgrade (notmuch, NULL, NULL);
|
||||
status = notmuch_database_open (path,
|
||||
NOTMUCH_DATABASE_MODE_READ_WRITE,
|
||||
¬much);
|
||||
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
|
||||
|
|
|
@ -140,11 +140,25 @@ typedef struct _notmuch_filenames notmuch_filenames_t;
|
|||
* contained within 'path' can be added to the database by calling
|
||||
* notmuch_database_add_message.
|
||||
*
|
||||
* In case of any failure, this function returns NULL, (after printing
|
||||
* an error message on stderr).
|
||||
* In case of any failure, this function returns an error status and
|
||||
* sets *database to NULL (after printing an error message on stderr).
|
||||
*
|
||||
* Return value:
|
||||
*
|
||||
* NOTMUCH_STATUS_SUCCESS: Successfully created the database.
|
||||
*
|
||||
* NOTMUCH_STATUS_NULL_POINTER: The given 'path' argument is NULL.
|
||||
*
|
||||
* NOTMUCH_STATUS_OUT_OF_MEMORY: Out of memory.
|
||||
*
|
||||
* NOTMUCH_STATUS_FILE_ERROR: An error occurred trying to create the
|
||||
* database file (such as permission denied, or file not found,
|
||||
* etc.), or the database already exists.
|
||||
*
|
||||
* NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred.
|
||||
*/
|
||||
notmuch_database_t *
|
||||
notmuch_database_create (const char *path);
|
||||
notmuch_status_t
|
||||
notmuch_database_create (const char *path, notmuch_database_t **database);
|
||||
|
||||
typedef enum {
|
||||
NOTMUCH_DATABASE_MODE_READ_ONLY = 0,
|
||||
|
|
|
@ -900,7 +900,8 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
|
|||
return 1;
|
||||
|
||||
printf ("Found %d total files (that's not much mail).\n", count);
|
||||
notmuch = notmuch_database_create (db_path);
|
||||
if (notmuch_database_create (db_path, ¬much))
|
||||
return 1;
|
||||
add_files_state.total_files = count;
|
||||
} else {
|
||||
if (notmuch_database_open (db_path, NOTMUCH_DATABASE_MODE_READ_WRITE,
|
||||
|
|
Loading…
Reference in a new issue