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 371fb47..88e8533 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 fdin into fdout. */
+static notmuch_bool_t
+copy_fd_data (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_fd_data (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

Reply via email to