Atomically move the new message file from the Maildir 'tmp' directory to 'new'. --- notmuch-insert.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-) diff --git a/notmuch-insert.c b/notmuch-insert.c index 340f7e4..bab1fed 100644 --- a/notmuch-insert.c +++ b/notmuch-insert.c @@ -75,6 +75,20 @@ maildir_open_tmp (void *ctx, const char *dir, char **tmppath, char **newpath) } static notmuch_bool_t +maildir_move_to_new (const char *tmppath, const char *newpath) +{ + /* We follow the Dovecot recommendation to simply use rename() + * instead of link() and unlink(). + */ + if (rename (tmppath, newpath) == 0) { + return TRUE; + } + + fprintf (stderr, "Error: rename() failed: %s\n", strerror (errno)); + return FALSE; +} + +static notmuch_bool_t copy_fd_data (int fdin, int fdout) { char buf[4096]; @@ -132,6 +146,10 @@ insert_message (void *ctx, notmuch_database_t *notmuch, int fdin, close (fdout); + if (ret) { + ret = maildir_move_to_new (tmppath, newpath); + } + if (!ret) { unlink (tmppath); } -- 1.7.4.4