Read the new message from standard input into the Maildir tmp file. --- notmuch-insert.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-)
diff --git a/notmuch-insert.c b/notmuch-insert.c index 7d100ae..38e815f 100644 --- a/notmuch-insert.c +++ b/notmuch-insert.c @@ -94,6 +94,47 @@ maildir_open_tmp_file (void *ctx, const char *dir, return fd; } +/* Copy the contents of standard input (fdin) into fdout. */ +static notmuch_bool_t +copy_stdin (int fdin, int fdout) +{ + char buf[4096]; + char *p; + ssize_t remain; + ssize_t written; + + for (;;) { + remain = read (fdin, buf, sizeof (buf)); + if (remain == 0) + break; + if (remain < 0) { + if (errno == EINTR) + continue; + fprintf (stderr, "Error: reading from standard input: %s\n", + strerror (errno)); + return FALSE; + } + + p = buf; + do { + written = write (fdout, p, remain); + if (written == 0) + return FALSE; + if (written < 0) { + if (errno == EINTR) + continue; + fprintf (stderr, "Error: writing to temporary file: %s", + strerror (errno)); + return FALSE; + } + p += written; + remain -= written; + } while (remain > 0); + } + + return TRUE; +} + static notmuch_bool_t insert_message (void *ctx, notmuch_database_t *notmuch, int fdin, const char *dir) @@ -101,16 +142,18 @@ insert_message (void *ctx, notmuch_database_t *notmuch, int fdin, char *tmppath; char *newpath; int fdout; + notmuch_bool_t ret; fdout = maildir_open_tmp_file (ctx, dir, &tmppath, &newpath); if (fdout < 0) { return FALSE; } - - /* For now we just delete the tmp file immediately. */ + ret = copy_stdin (fdin, fdout); close (fdout); - unlink (tmppath); - return FALSE; + if (!ret) { + unlink (tmppath); + } + return ret; } int -- 1.7.12.1 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch