X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffmt_scan.c;h=9ad7b8a7e4505ee923546c2fdf3a1e033dd585b4;hp=8414829b833347cd2dadff2ea0918e9eea0942ab;hb=fc9279e818dfc96c63a5d75a89080cc68cfe1170;hpb=75f03a965d10d34099b13799e6fe0ed43f56e257 diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index 8414829..9ad7b8a 100644 --- a/sbr/fmt_scan.c +++ b/sbr/fmt_scan.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include #ifdef HAVE_SYS_TIME_H # include @@ -25,8 +27,6 @@ # include #endif -extern char *formataddr(); /* hook for custom address formatting */ - extern int fmt_norm; /* defined in sbr/fmt_def.c = AD_NAME */ struct mailname fmt_mnull; @@ -324,7 +324,7 @@ fmt_scan(struct format *format, char *scanl, int width, int *dat) cptrimmed(&cp, str, fmt->f_width, fmt->f_fill, ep - cp); break; case FT_STRFW: - adios(NULL, "internal error (FT_STRFW)"); + adios(EX_SOFTWARE, NULL, "internal error (FT_STRFW)"); case FT_NUM: n = snprintf(cp, ep - cp + 1, "%d", value); @@ -679,7 +679,7 @@ fmt_scan(struct format *format, char *scanl, int width, int *dat) } else str = mn->m_text; break; - } + } } } break; @@ -688,32 +688,10 @@ fmt_scan(struct format *format, char *scanl, int width, int *dat) /* UNQUOTEs RFC-2822 quoted-string and quoted-pair */ case FT_LS_UNQUOTE: if (str) { - int m; strncpy(buffer, str, sizeof(buffer)); /* strncpy doesn't NUL-terminate if it fills the buffer */ buffer[sizeof(buffer)-1] = '\0'; - str = buffer; - - /* we will parse from buffer to buffer2 */ - n = 0; /* n is the input position in str */ - m = 0; /* m is the ouput position in buffer2 */ - - while ( str[n] != '\0') { - switch ( str[n] ) { - case '\\': - n++; - if ( str[n] != '\0') - buffer2[m++] = str[n++]; - break; - case '"': - n++; - break; - default: - buffer2[m++] = str[n++]; - break; - } - } - buffer2[m] = '\0'; + unquote_string(buffer, buffer2); str = buffer2; } break; @@ -776,16 +754,17 @@ fmt_scan(struct format *format, char *scanl, int width, int *dat) indent = strlen(sp); wid -= indent; if (wid <= 0) { - adios(NULL, "putaddr -- num register (%d) " + adios(EX_SOFTWARE, NULL, "putaddr -- num register (%d) " "must be greater than label " "width (%d)", value, indent); } while( (c = *sp++) && cp < ep) *cp++ = c; while (len > wid) { - /* try to break at a comma; failing that, - * break at a space. - */ + /* + ** try to break at a comma; failing that, + ** break at a space. + */ lastb = 0; sp = lp + wid; while (sp > lp && (c = *--sp) != ',') { if (! lastb && isspace(c)) @@ -867,6 +846,20 @@ fmt_scan(struct format *format, char *scanl, int width, int *dat) } break; + case FT_LS_UNMAILTO: + if (!str) { + break; + } + str = trim(str); + if (*str == '<' && str[strlen(str)-1] == '>') { + str++; + str[strlen(str)-1] = '\0'; + } + if (strncmp("mailto:", str, 7)==0) { + str += 7; + } + break; + } fmt++; }