mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18: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_status_t
|
||||||
notmuch_database_create (const char *path)
|
notmuch_database_create (const char *path, notmuch_database_t **database)
|
||||||
{
|
{
|
||||||
|
notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
|
||||||
notmuch_database_t *notmuch = NULL;
|
notmuch_database_t *notmuch = NULL;
|
||||||
char *notmuch_path = NULL;
|
char *notmuch_path = NULL;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
@ -530,6 +531,7 @@ notmuch_database_create (const char *path)
|
||||||
|
|
||||||
if (path == NULL) {
|
if (path == NULL) {
|
||||||
fprintf (stderr, "Error: Cannot create a database for a NULL path.\n");
|
fprintf (stderr, "Error: Cannot create a database for a NULL path.\n");
|
||||||
|
status = NOTMUCH_STATUS_NULL_POINTER;
|
||||||
goto DONE;
|
goto DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,12 +539,14 @@ notmuch_database_create (const char *path)
|
||||||
if (err) {
|
if (err) {
|
||||||
fprintf (stderr, "Error: Cannot create database at %s: %s.\n",
|
fprintf (stderr, "Error: Cannot create database at %s: %s.\n",
|
||||||
path, strerror (errno));
|
path, strerror (errno));
|
||||||
|
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||||
goto DONE;
|
goto DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! S_ISDIR (st.st_mode)) {
|
if (! S_ISDIR (st.st_mode)) {
|
||||||
fprintf (stderr, "Error: Cannot create database at %s: Not a directory.\n",
|
fprintf (stderr, "Error: Cannot create database at %s: Not a directory.\n",
|
||||||
path);
|
path);
|
||||||
|
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||||
goto DONE;
|
goto DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,19 +557,30 @@ notmuch_database_create (const char *path)
|
||||||
if (err) {
|
if (err) {
|
||||||
fprintf (stderr, "Error: Cannot create directory %s: %s.\n",
|
fprintf (stderr, "Error: Cannot create directory %s: %s.\n",
|
||||||
notmuch_path, strerror (errno));
|
notmuch_path, strerror (errno));
|
||||||
|
status = NOTMUCH_STATUS_FILE_ERROR;
|
||||||
goto DONE;
|
goto DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
notmuch_database_open (path,
|
status = notmuch_database_open (path,
|
||||||
NOTMUCH_DATABASE_MODE_READ_WRITE,
|
NOTMUCH_DATABASE_MODE_READ_WRITE,
|
||||||
¬much);
|
¬much);
|
||||||
notmuch_database_upgrade (notmuch, NULL, NULL);
|
if (status)
|
||||||
|
goto DONE;
|
||||||
|
status = notmuch_database_upgrade (notmuch, NULL, NULL);
|
||||||
|
if (status) {
|
||||||
|
notmuch_database_close(notmuch);
|
||||||
|
notmuch = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
DONE:
|
DONE:
|
||||||
if (notmuch_path)
|
if (notmuch_path)
|
||||||
talloc_free (notmuch_path);
|
talloc_free (notmuch_path);
|
||||||
|
|
||||||
return notmuch;
|
if (database)
|
||||||
|
*database = notmuch;
|
||||||
|
else
|
||||||
|
talloc_free (notmuch);
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
notmuch_status_t
|
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
|
* contained within 'path' can be added to the database by calling
|
||||||
* notmuch_database_add_message.
|
* notmuch_database_add_message.
|
||||||
*
|
*
|
||||||
* In case of any failure, this function returns NULL, (after printing
|
* In case of any failure, this function returns an error status and
|
||||||
* an error message on stderr).
|
* 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_status_t
|
||||||
notmuch_database_create (const char *path);
|
notmuch_database_create (const char *path, notmuch_database_t **database);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NOTMUCH_DATABASE_MODE_READ_ONLY = 0,
|
NOTMUCH_DATABASE_MODE_READ_ONLY = 0,
|
||||||
|
|
|
@ -900,7 +900,8 @@ notmuch_new_command (void *ctx, int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
printf ("Found %d total files (that's not much mail).\n", count);
|
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;
|
add_files_state.total_files = count;
|
||||||
} else {
|
} else {
|
||||||
if (notmuch_database_open (db_path, NOTMUCH_DATABASE_MODE_READ_WRITE,
|
if (notmuch_database_open (db_path, NOTMUCH_DATABASE_MODE_READ_WRITE,
|
||||||
|
|
Loading…
Reference in a new issue