From: Pierre Habouzit Date: Sat, 4 Nov 2006 14:21:15 +0000 (+0100) Subject: drop str_adjust: we don't care about a few octets unused, please do me a X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=commitdiff_plain;h=a8aba140a61d5b86093cea46afcb613092d4978d drop str_adjust: we don't care about a few octets unused, please do me a favour. simplify decoding functions. Signed-off-by: Pierre Habouzit --- diff --git a/charset.c b/charset.c index 9826ef4..ba6b422 100644 --- a/charset.c +++ b/charset.c @@ -399,8 +399,6 @@ int mutt_convert_string (char **ps, const char *from, const char *to, p_delete(ps); *ps = buf; - - str_adjust (ps); return 0; } else diff --git a/lib-mime/rfc2047.c b/lib-mime/rfc2047.c index c28b2b9..26c68ce 100644 --- a/lib-mime/rfc2047.c +++ b/lib-mime/rfc2047.c @@ -776,14 +776,14 @@ static ssize_t lwsrlen(const char *s, ssize_t n) /* 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); + const char *s = *pd; - size_t dlen; + char *d0, *d; + ssize_t dlen; + int found_encoded = 0; if (!s || !*s) return; @@ -792,63 +792,62 @@ void rfc2047_decode (char **pd) 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) { /* no encoded words */ - if (!option (OPTSTRICTMIME)) { + if (!strict_mime) { + ssize_t m, n; + n = m_strlen(s); - if (found_encoded && (m = lwslen (s, n)) != 0) { + if (found_encoded && (m = lwslen(s, n)) != 0) { if (m != n) - *d = ' ', d++, dlen--; + *d++ = ' ', dlen--; n -= m, s += m; } - if (ascii_strcasecmp (AssumedCharset, "us-ascii")) { + + if (ascii_strcasecmp(AssumedCharset, "us-ascii")) { char *t; - ssize_t tlen; t = p_dupstr(s, n); - 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; } } - strncpy (d, s, dlen); - d += dlen; + d += m_strcpy(d, dlen, s); break; } if (p != s) { + ssize_t m, n; + 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) - *d = ' ', d++, dlen--; + *d++ = ' ', dlen--; n -= m, s += m; } - 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 = ' ', d++, dlen--; + *d++ = ' ', dlen--; } - } - 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); d += n; dlen -= n; } @@ -857,15 +856,12 @@ void rfc2047_decode (char **pd) rfc2047_decode_word(d, dlen, p); found_encoded = 1; s = q; - n = m_strlen(d); - dlen -= n; - d += n; + while (*d && dlen) + d++, dlen--; } - *d = 0; p_delete(pd); *pd = d0; - str_adjust (pd); } void rfc2047_decode_adrlist(address_t *a) diff --git a/lib/str.c b/lib/str.c index 9f0eae6..3d3f10e 100644 --- a/lib/str.c +++ b/lib/str.c @@ -17,13 +17,6 @@ #include "str.h" -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) { diff --git a/lib/str.h b/lib/str.h index 0f9a686..b5bf82f 100644 --- a/lib/str.h +++ b/lib/str.h @@ -18,7 +18,6 @@ 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*);