X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=rfc822.c;h=15b88f05ef476312af280de1d2ec7183ed4768db;hb=7ffec45913adc02a5c5f6a2cfe95a41d42ae535c;hp=345ced020c1ca18bc867ff9183e557c33800aba4;hpb=af7d73c7ab76ad81fed78b7f5c024daf1af87d9d;p=~andy%2Ffetchmail diff --git a/rfc822.c b/rfc822.c index 345ced02..15b88f05 100644 --- a/rfc822.c +++ b/rfc822.c @@ -19,19 +19,24 @@ is part of fetchmail and the Unix Cookbook, and are released under the MIT license. Compile with -DMAIN to build the demonstrator. ******************************************************************************/ + +#include "config.h" + #include #include #include +#include #include #include "fetchmail.h" +#include "sdump.h" #ifndef MAIN #include "i18n.h" #else #include static int verbose; -char *program_name = "rfc822"; +const char *program_name = "rfc822"; #endif /* MAIN */ #ifndef TRUE @@ -41,6 +46,8 @@ char *program_name = "rfc822"; #define HEADER_END(p) ((p)[0] == '\n' && ((p)[1] != ' ' && (p)[1] != '\t')) +#define BEFORE_EOL(s) (strcspn((s), "\r\n")) + char *reply_hack( char *buf /* header to be hacked */, const char *host /* server hostname */, @@ -72,8 +79,10 @@ char *reply_hack( } #ifndef MAIN - if (outlevel >= O_DEBUG) - report_build(stdout, GT_("About to rewrite %s"), buf); + if (outlevel >= O_DEBUG) { + report_build(stdout, GT_("About to rewrite %s...\n"), (cp = sdump(buf, BEFORE_EOL(buf)))); + xfree(cp); + } /* make room to hack the address; buf must be malloced */ for (cp = buf; *cp; cp++) @@ -96,7 +105,7 @@ char *reply_hack( if (verbose) { printf("state %d: %s", state, buf); - printf("%*s^\n", from - buf + 10, " "); + printf("%*s^\n", (int)(from - buf + 10), " "); } #endif /* MAIN */ if (state != 2) @@ -208,8 +217,12 @@ char *reply_hack( } #ifndef MAIN - if (outlevel >= O_DEBUG) - report_complete(stdout, GT_("Rewritten version is %s\n"), buf); + if (outlevel >= O_DEBUG) { + report_complete(stdout, GT_("...rewritten version is %s.\n"), + (cp = sdump(buf, BEFORE_EOL(buf)))); + xfree(cp) + } + #endif /* MAIN */ *length = strlen(buf); return(buf); @@ -247,13 +260,15 @@ char *nxtaddr(const char *hdr /* header to be parsed, NUL to continue previous h tp = 0; } + if (!hp) return NULL; + for (; *hp; hp++) { #ifdef MAIN if (verbose) { printf("state %d: %s", state, orighdr); - printf("%*s^\n", hp - orighdr + 10, " "); + printf("%*s^\n", (int)(hp - orighdr + 10), " "); } #endif /* MAIN */ @@ -424,6 +439,8 @@ int main(int argc, char *argv[]) break; } + longbuf[0] = '\0'; + while (fgets(buf, sizeof(buf)-1, stdin)) { if (buf[0] == ' ' || buf[0] == '\t')