| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #include "config.h"
- #include <stdio.h>
- #include <string.h>
- /**
- * rfc822 - Parsing of RFC822 emails
- *
- * This code allows easy processing of RFC822/RFC2822/RFC5322
- * formatted email messages. For now only read-only operation is
- * supported.
- *
- * The important design goals are these:
- * - Be lazy. Don't compute immediately compute fancy indexes for the
- * message. Just reading messages into the system and then sending
- * them out again should not incur a serious performance hit.
- * - But cache. Once the user does request data that needs parsing,
- * cache the results in suitable data structures so that if lots
- * more lookups are done they're then fast.
- * - Cope with ill-formatted messages. Even if the input is not
- * RFC822 compliant, don't SEGV and try to return as much useful
- * data as possible.
- *
- * Define TAL_USE_TALLOC to use libtalloc as the allocator, otherwise
- * it will use ccan/tal (usually done on the cmdline, as tal/str will need
- * it too).
- *
- * Example:
- * // Given '' outputs 'body'
- * // Given 'From' outputs ' <from@example.com>'
- * // Given 'To' outputs ' <to@example.com>'
- * char buf[] = "From: <from@example.com>\n"
- * "To: <to@example.com>\n\n"
- * "body\n";
- * struct rfc822_msg *msg;
- * struct bytestring out;
- *
- * msg = rfc822_start(NULL, buf, sizeof(buf));
- * if (!argv[1] || !argv[1][0])
- * out = rfc822_body(msg);
- * else {
- * struct rfc822_header *hdr;
- * hdr = rfc822_first_header_of_name(msg, argv[1]);
- * if (!hdr)
- * exit(1);
- * out = rfc822_header_unfolded_value(msg, hdr);
- * }
- * fwrite(out.ptr, 1, out.len, stdout);
- * rfc822_free(msg);
- *
- * License: LGPL (v2.1 or any later version)
- *
- */
- int main(int argc, char *argv[])
- {
- /* Expect exactly one argument */
- if (argc != 2)
- return 1;
- if (strcmp(argv[1], "depends") == 0) {
- #ifdef TAL_USE_TALLOC
- printf("ccan/tal/talloc\n");
- #else
- printf("ccan/tal\n");
- #endif
- printf("ccan/list\n");
- printf("ccan/str\n");
- printf("ccan/bytestring\n");
- printf("ccan/mem\n");
- return 0;
- }
- if (strcmp(argv[1], "testdepends") == 0) {
- printf("ccan/failtest\n");
- printf("ccan/foreach\n");
- printf("ccan/array_size\n");
- printf("ccan/tal/str\n");
- return 0;
- }
- return 1;
- }
|