diff options
author | June McEnroe <june@causal.agency> | 2019-12-21 07:31:13 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-12-21 07:31:13 -0500 |
commit | 1d3105511a3779a4a57117b425ad0588e28827ea (patch) | |
tree | ef725d831aab80ce0472f5b423b0c6a8690a6057 /imbox.c | |
parent | Implement -CFST (diff) | |
download | imbox-1d3105511a3779a4a57117b425ad0588e28827ea.tar.gz imbox-1d3105511a3779a4a57117b425ad0588e28827ea.zip |
Convert CRLF to LF
Diffstat (limited to 'imbox.c')
-rw-r--r-- | imbox.c | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/imbox.c b/imbox.c index 788f032..22bb36a 100644 --- a/imbox.c +++ b/imbox.c @@ -37,6 +37,23 @@ static void compile(regex_t *regex, const char *pattern) { errx(EX_SOFTWARE, "regcomp: %s: %s", buf, pattern); } +static void printLines(const char *lines) { + static regex_t fromRegex; + compile(&fromRegex, "^>*From "); + while (*lines) { + size_t len = strcspn(lines, "\r\n"); + regmatch_t match; + if (!regexec(&fromRegex, lines, 1, &match, 0) && !match.rm_so) { + printf(">%.*s\n", (int)len, lines); + } else { + printf("%.*s\n", (int)len, lines); + } + lines += len; + if (*lines == '\r') lines++; + if (*lines == '\n') lines++; + } +} + static void mboxrd(const char *headers, const char *body) { static regex_t fromRegex; compile(&fromRegex, "^From: .*<([^>]+)>"); @@ -56,7 +73,7 @@ static void mboxrd(const char *headers, const char *body) { error = regexec(&dateRegex, headers, 6, date, 0); if (error) errx(EX_DATAERR, "missing Date header"); printf( - "%.*s %.*s %.*s %.*s %.*s\r\n", + "%.*s %.*s %.*s %.*s %.*s\n", (int)(date[1].rm_eo - date[1].rm_so), &headers[date[1].rm_so], (int)(date[3].rm_eo - date[3].rm_so), &headers[date[3].rm_so], (int)(date[2].rm_eo - date[2].rm_so), &headers[date[2].rm_so], @@ -64,29 +81,9 @@ static void mboxrd(const char *headers, const char *body) { (int)(date[4].rm_eo - date[4].rm_so), &headers[date[4].rm_so] ); - printf("%s", headers); - - static regex_t quoteRegex; - compile("eRegex, "^>*From "); - regmatch_t match = {0}; - for (const char *ptr = body;; ptr += match.rm_eo) { - regmatch_t match; - error = regexec( - "eRegex, body, 1, &match, (ptr > body ? REG_NOTBOL : 0) - ); - if (error) { - printf("%s", ptr); - break; - } - printf( - "%.*s>%.*s", - (int)match.rm_so, ptr, - (int)(match.rm_eo - match.rm_so), &ptr[match.rm_so] - ); - } - - // FIXME: mbox technically shouldn't use \r\n but everything else does... - printf("\r\n"); + printLines(headers); + printLines(body); + printf("\n"); } static bool verbose; |