favour.
simplify decoding functions.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
/* try to decode anything that looks like a valid RFC2047 encoded
* header field, ignoring RFC822 parsing rules
*/
/* try to decode anything that looks like a valid RFC2047 encoded
* header field, ignoring RFC822 parsing rules
*/
-void rfc2047_decode (char **pd)
+void rfc2047_decode(char **pd)
- const char *p, *q;
- size_t m, n;
- int found_encoded = 0;
- char *d0, *d;
+ const int strict_mime = option(OPTSTRICTMIME);
+
+ char *d0, *d;
+ ssize_t dlen;
+ int found_encoded = 0;
d = d0 = p_new(char, dlen + 1);
while (*s && dlen > 0) {
d = d0 = p_new(char, dlen + 1);
while (*s && dlen > 0) {
- if (!(p = find_encoded_word (s, &q))) {
+ const char *p, *q;
+
+ p = find_encoded_word(s, &q);
+
+ if (!p) {
- if (!option (OPTSTRICTMIME)) {
+ if (!strict_mime) {
+ ssize_t m, n;
+
- if (found_encoded && (m = lwslen (s, n)) != 0) {
+ if (found_encoded && (m = lwslen(s, n)) != 0) {
- if (ascii_strcasecmp (AssumedCharset, "us-ascii")) {
+
+ if (ascii_strcasecmp(AssumedCharset, "us-ascii")) {
- if (mutt_convert_nonmime_string (&t) == 0) {
- tlen = m_strlen(t);
- strncpy (d, t, tlen);
- d += tlen;
- }
- else {
- strncpy (d, s, n);
- d += n;
+ if (mutt_convert_nonmime_string(&t) == 0) {
+ d += m_strcpy(d, dlen, t);
+ } else {
+ d += m_strcpy(d, dlen, s);
}
p_delete(&t);
break;
}
}
}
p_delete(&t);
break;
}
}
- strncpy (d, s, dlen);
- d += dlen;
+ d += m_strcpy(d, dlen, s);
n = (p - s);
/* ignore spaces between encoded words
* and linear white spaces between encoded word and *text */
n = (p - s);
/* ignore spaces between encoded words
* and linear white spaces between encoded word and *text */
- if (!option (OPTSTRICTMIME)) {
- if (found_encoded && (m = lwslen (s, n)) != 0) {
+ if (!strict_mime) {
+ if (found_encoded && (m = lwslen(s, n)) != 0) {
- if ((m = n - lwsrlen (s, n)) != 0) {
- if (m > dlen)
- m = dlen;
- memcpy (d, s, m);
+ if ((m = n - lwsrlen(s, n)) != 0) {
+ m = m_strncpy(d, dlen, s, m);
d += m;
dlen -= m;
if (m != n)
d += m;
dlen -= m;
if (m != n)
- }
- else if (!found_encoded || strspn (s, " \t\r\n") != n) {
- if (n > dlen)
- n = dlen;
- memcpy (d, s, n);
+ } else
+ if (!found_encoded || (ssize_t)strspn(s, " \t\r\n") != n) {
+ n = m_strncpy(d, dlen, s, n);
rfc2047_decode_word(d, dlen, p);
found_encoded = 1;
s = q;
rfc2047_decode_word(d, dlen, p);
found_encoded = 1;
s = q;
- n = m_strlen(d);
- dlen -= n;
- d += n;
+ while (*d && dlen)
+ d++, dlen--;
}
void rfc2047_decode_adrlist(address_t *a)
}
void rfc2047_decode_adrlist(address_t *a)
-void str_adjust (char **p)
-{
- if (!p || !*p)
- return;
- p_realloc(p, m_strlen(*p) + 1);
-}
-
/* convert all characters in the string to lowercase */
char *str_tolower (char *s)
{
/* convert all characters in the string to lowercase */
char *str_tolower (char *s)
{
char *str_tolower (char*);
char *str_substrcpy (char*, const char*, const char*, size_t);
char *str_substrdup (const char*, const char*);
char *str_tolower (char*);
char *str_substrcpy (char*, const char*, const char*, size_t);
char *str_substrdup (const char*, const char*);
-void str_adjust (char**);
int str_eq (const char*, const char*);
const char *str_isstr (const char*, const char*);
void str_skip_trailws (char*);
int str_eq (const char*, const char*);
const char *str_isstr (const char*, const char*);
void str_skip_trailws (char*);