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