Similar to other formats, allow the body to be omitted when outputting
raw messages.
This can be used by UI code to get the full headers of a message
without the need to consume the body, which may be large.
---
notmuch-show.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/notmuch-show.c b/notmuch-show.c
index dd836add..f52e6a40 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -888,6 +888,8 @@ format_part_raw (unused (const void *ctx), unused (sprinter_t *sp),
ssize_t ssize;
char buf[4096];
notmuch_status_t ret = NOTMUCH_STATUS_FILE_ERROR;
+ unsigned int cr_count = 0;
+ notmuch_bool_t done = false;
filename = notmuch_message_get_filename (node->envelope_file);
if (filename == NULL) {
@@ -901,13 +903,32 @@ format_part_raw (unused (const void *ctx), unused (sprinter_t *sp),
goto DONE;
}
- while (! g_mime_stream_eos (stream)) {
+ while (! done && ! g_mime_stream_eos (stream)) {
ssize = g_mime_stream_read (stream, buf, sizeof (buf));
if (ssize < 0) {
fprintf (stderr, "Error: Read failed from %s\n", filename);
goto DONE;
}
+ if (! params->output_body) {
+ /*
+ * Look for two adjacent newlines, as they mark the
+ * separation of the headers from the body.
+ */
+ for (ssize_t off = 0; off < ssize; off++) {
+ if (buf[off] == '\n') {
+ cr_count++;
+ } else {
+ cr_count = 0;
+ }
+ if (cr_count == 2) {
+ ssize = off;
+ done = true;
+ break;
+ }
+ }
+ }
+
if (ssize > 0 && fwrite (buf, ssize, 1, stdout) != 1) {
fprintf (stderr, "Error: Write %ld chars to stdout failed\n", ssize);
goto DONE;
@@ -1310,9 +1331,10 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
} else {
if (format != NOTMUCH_FORMAT_TEXT &&
format != NOTMUCH_FORMAT_JSON &&
- format != NOTMUCH_FORMAT_SEXP)
+ format != NOTMUCH_FORMAT_SEXP &&
+ format != NOTMUCH_FORMAT_RAW)
fprintf (stderr,
- "Warning: --body=false only implemented for format=text, format=json and format=sexp\n");
+ "Warning: --body=false is not implemented for format=mbox\n");
}
}
--
2.20.1
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org