#define hexval(c) Index_hex[(unsigned int)(c)]
#define base64val(c) Index_64[(unsigned int)(c)]
-#define OPTIGNORELWS 0
-
-static int option(int opt UNUSED)
-{
- return 1;
-}
+#define option_OPTIGNORELWS 1
static size_t convert_string (char *f, size_t flen,
const char *from, const char *to,
}
}
- size_t dlen;
if (charset && system_charset)
- convert_string (d0, strlen(d0), charset, system_charset, &d0, &dlen);
+ {
+ char *dnew;
+ size_t dlen;
+ if (convert_string (d0, strlen(d0), charset, system_charset, &dnew, &dlen) == (size_t) -1)
+ {
+ debug("Charset conversion failure: <%s> from %s\n", d0, charset);
+ free (charset);
+ free (d0);
+ return (-1);
+ }
+ free (d0);
+ d0 = dnew;
+ }
strfcpy (d, d0, len);
free (charset);
free (d0);
if (!(p = find_encoded_word (s, &q)))
{
/* no encoded words */
- if (option (OPTIGNORELWS))
+ if (option_OPTIGNORELWS)
{
n = strlen (s);
if (found_encoded && (m = lwslen (s, n)) != 0)
n = (size_t) (p - s);
/* ignore spaces between encoded word
* and linear-white-space between encoded word and *text */
- if (option (OPTIGNORELWS))
+ if (option_OPTIGNORELWS)
{
if (found_encoded && (m = lwslen (s, n)) != 0)
{
}
}
- rfc2047_decode_word (d, p, dlen);
+ if (rfc2047_decode_word (d, p, dlen) < 0)
+ strcpy(d, p);
found_encoded = 1;
s = q;
n = strlen (d);