static int top0 (msgset_t *mspec, mu_message_t msg, void *data) { mu_stream_t stream; char *buf = NULL; size_t size = 0, n; int lines; if (mailvar_get (&lines, "toplines", mailvar_type_number, 1) || lines < 0) return 1; mu_message_get_streamref (msg, &stream); for (; lines > 0; lines--) { int status = mu_stream_getline (stream, &buf, &size, &n); if (status != 0 || n == 0) break; mu_printf ("%s", buf); } free (buf); mu_stream_destroy (&stream); set_cursor (mspec->msg_part[0]); util_mark_read (msg); return 0; }
int mu_message_encapsulate (mu_message_t msg, mu_message_t *newmsg, mu_mime_io_buffer_t info) { mu_stream_t istream, ostream; int ret = 0; mu_message_t tmsg = NULL; if (newmsg == NULL) return MU_ERR_OUT_PTR_NULL; if (msg == NULL) { mu_header_t hdr; ret = mu_message_create (&tmsg, NULL); if (ret) return ret; msg = tmsg; #define MSG822_HEADER "Content-Type: message/rfc822\n" \ "Content-Transfer-Encoding: 7bit\n\n" if ((ret = mu_header_create (&hdr, MSG822_HEADER, sizeof (MSG822_HEADER) - 1)) == 0) ret = mu_message_set_header (msg, hdr, NULL); #undef MSG822_HEADER if (ret) { mu_message_destroy (&msg, NULL); return ret; } } if ((ret = _attachment_setup (&info, msg, &ostream)) != 0) { mu_message_destroy (&tmsg, NULL); return ret; } info->msg = msg; if (ret == 0 && (ret = mu_message_get_streamref (msg, &istream)) == 0) { mu_stream_seek (istream, 0, MU_SEEK_SET, NULL); ret = mu_stream_copy (ostream, istream, 0, NULL); mu_stream_destroy (&istream); } if (ret == 0) *newmsg = info->msg; mu_stream_destroy (&ostream); _attachment_free (info, ret && ret != EAGAIN); return ret; }
oo\n\ "; int main (int argc, char **argv) { int i; char *p; mu_message_t msg; mu_stream_t stream = NULL; mu_header_t hdr; mu_body_t body; mu_set_program_name (argv[0]); mu_static_memory_stream_create (&stream, text, strlen (text)); assert (mu_stream_to_message (stream, &msg) == 0); mu_stream_unref (stream); assert (mu_message_get_header (msg, &hdr) == 0); assert (mu_message_get_body (msg, &body) == 0); assert (mu_body_get_streamref (body, &stream) == 0); assert (mu_stream_seek (stream, 0, MU_SEEK_END, NULL) == 0); for (i = 1; i < argc; i++) { if (strcmp (argv[i], "-h") == 0) { mu_printf ("usage: %s [-a HDR:VAL] [-t TEXT]\n", mu_program_name); return 0; } if (strcmp (argv[i], "-a") == 0) { i++; assert (argv[i] != NULL); p = strchr (argv[i], ':'); assert (p != NULL); *p++ = 0; while (*p && mu_isspace (*p)) p++; assert (mu_header_set_value (hdr, argv[i], p, 1) == 0); } else if (strcmp (argv[i], "-l") == 0) { mu_off_t off; int whence = MU_SEEK_SET; i++; assert (argv[i] != NULL); off = strtol (argv[i], &p, 10); assert (*p == 0); if (off < 0) whence = MU_SEEK_END; assert (mu_stream_seek (stream, off, whence, NULL) == 0); } else if (strcmp (argv[i], "-t") == 0) { mu_wordsplit_t ws; i++; assert (argv[i] != NULL); if (mu_wordsplit (argv[i], &ws, MU_WRDSF_NOSPLIT | MU_WRDSF_DEFFLAGS)) { mu_error ("mu_wordsplit: %s", mu_wordsplit_strerror (&ws)); exit (1); } else assert (mu_stream_write (stream, ws.ws_wordv[0], strlen (ws.ws_wordv[0]), NULL) == 0); mu_wordsplit_free (&ws); } else mu_error ("ignoring unknown argument %s", argv[i]); } mu_stream_unref (stream); assert (mu_message_get_streamref (msg, &stream) == 0); assert (mu_stream_copy (mu_strout, stream, 0, NULL) == 0); mu_stream_unref (stream); return 0; }