diff options
author | Austin Clements <amdragon@MIT.EDU> | 2012-05-18 00:13:35 -0400 |
---|---|---|
committer | David Bremner <bremner@debian.org> | 2012-05-23 22:30:32 -0300 |
commit | 0c950146a14fa2bb0a0bf542073b2cdca141afd1 (patch) | |
tree | 2dcbc9faabb6cda485b05324041c0a5821c44ce6 /lib | |
parent | f69314fbd37f403a395b7c1c44595c8f696b05b7 (diff) |
lib: Perform the same transformation to _notmuch_database_find_directory_id
Now _notmuch_database_find_directory_id takes a flags argument, which
it passes through to _notmuch_directory_create and can indicate if the
directory does not exist. Again, callers have been updated, but
retain their original behavior.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/database.cc | 14 | ||||
-rw-r--r-- | lib/directory.cc | 8 | ||||
-rw-r--r-- | lib/notmuch-private.h | 1 |
3 files changed, 19 insertions, 4 deletions
diff --git a/lib/database.cc b/lib/database.cc index df996a9a..716982d0 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -1197,9 +1197,17 @@ _notmuch_database_split_path (void *ctx, return NOTMUCH_STATUS_SUCCESS; } +/* Find the document ID of the specified directory. + * + * If (flags & NOTMUCH_FIND_CREATE), a new directory document will be + * created if one does not exist for 'path'. Otherwise, if the + * directory document does not exist, this sets *directory_id to + * ((unsigned int)-1) and returns NOTMUCH_STATUS_SUCCESS. + */ notmuch_status_t _notmuch_database_find_directory_id (notmuch_database_t *notmuch, const char *path, + notmuch_find_flags_t flags, unsigned int *directory_id) { notmuch_directory_t *directory; @@ -1210,8 +1218,8 @@ _notmuch_database_find_directory_id (notmuch_database_t *notmuch, return NOTMUCH_STATUS_SUCCESS; } - directory = _notmuch_directory_create (notmuch, path, NOTMUCH_FIND_CREATE, &status); - if (status) { + directory = _notmuch_directory_create (notmuch, path, flags, &status); + if (status || !directory) { *directory_id = -1; return status; } @@ -1260,7 +1268,7 @@ _notmuch_database_filename_to_direntry (void *ctx, if (status) return status; - status = _notmuch_database_find_directory_id (notmuch, directory, + status = _notmuch_database_find_directory_id (notmuch, directory, NOTMUCH_FIND_CREATE, &directory_id); if (status) return status; diff --git a/lib/directory.cc b/lib/directory.cc index 83bb19bc..6a3ffed7 100644 --- a/lib/directory.cc +++ b/lib/directory.cc @@ -153,7 +153,13 @@ _notmuch_directory_create (notmuch_database_t *notmuch, _notmuch_database_split_path (local, path, &parent, &basename); - _notmuch_database_find_directory_id (notmuch, parent, &parent_id); + *status_ret = _notmuch_database_find_directory_id ( + notmuch, parent, NOTMUCH_FIND_CREATE, &parent_id); + if (*status_ret) { + notmuch_directory_destroy (directory); + directory = NULL; + goto DONE; + } if (basename) { term = talloc_asprintf (local, "%s%u:%s", diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index 538274f4..a36549d2 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -195,6 +195,7 @@ _notmuch_database_find_unique_doc_id (notmuch_database_t *notmuch, notmuch_status_t _notmuch_database_find_directory_id (notmuch_database_t *database, const char *path, + notmuch_find_flags_t flags, unsigned int *directory_id); const char * |