drop str_adjust: we don't care about a few octets unused, please do me a
authorPierre Habouzit <madcoder@debian.org>
Sat, 4 Nov 2006 14:21:15 +0000 (15:21 +0100)
committerPierre Habouzit <madcoder@debian.org>
Sat, 4 Nov 2006 14:21:15 +0000 (15:21 +0100)
favour.
simplify decoding functions.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
charset.c
lib-mime/rfc2047.c
lib/str.c
lib/str.h

index 9826ef4..ba6b422 100644 (file)
--- 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;
 
     p_delete(ps);
     *ps = buf;
-
-    str_adjust (ps);
     return 0;
   }
   else
     return 0;
   }
   else
index c28b2b9..26c68ce 100644 (file)
@@ -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
  */
 /* 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;
     const char *s = *pd;
-    size_t dlen;
+    char *d0, *d;
+    ssize_t dlen;
+    int found_encoded = 0;
 
     if (!s || !*s)
         return;
 
     if (!s || !*s)
         return;
@@ -792,63 +792,62 @@ void rfc2047_decode (char **pd)
     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) {
             /* no encoded words */
             /* no encoded words */
-            if (!option (OPTSTRICTMIME)) {
+            if (!strict_mime) {
+                ssize_t m, n;
+
                 n = m_strlen(s);
                 n = m_strlen(s);
-                if (found_encoded && (m = lwslen (s, n)) != 0) {
+                if (found_encoded && (m = lwslen(s, n)) != 0) {
                     if (m != n)
                     if (m != n)
-                        *d = ' ', d++, dlen--;
+                        *d++ = ' ', dlen--;
                     n -= m, s += m;
                 }
                     n -= m, s += m;
                 }
-                if (ascii_strcasecmp (AssumedCharset, "us-ascii")) {
+
+                if (ascii_strcasecmp(AssumedCharset, "us-ascii")) {
                     char *t;
                     char *t;
-                    ssize_t tlen;
 
                     t = p_dupstr(s, n);
 
                     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;
                 }
             }
                     }
                     p_delete(&t);
                     break;
                 }
             }
-            strncpy (d, s, dlen);
-            d += dlen;
+            d += m_strcpy(d, dlen, s);
             break;
         }
 
         if (p != 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 */
             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)
                     if (m != n)
-                        *d = ' ', d++, dlen--;
+                        *d++ = ' ', dlen--;
                     n -= m, s += m;
                 }
 
                     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 += 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;
             }
                 d += n;
                 dlen -= n;
             }
@@ -857,15 +856,12 @@ void rfc2047_decode (char **pd)
         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--;
     }
     }
-    *d = 0;
 
     p_delete(pd);
     *pd = d0;
 
     p_delete(pd);
     *pd = d0;
-    str_adjust (pd);
 }
 
 void rfc2047_decode_adrlist(address_t *a)
 }
 
 void rfc2047_decode_adrlist(address_t *a)
index 9f0eae6..3d3f10e 100644 (file)
--- a/lib/str.c
+++ b/lib/str.c
 
 #include "str.h"
 
 
 #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)
 {
 /* convert all characters in the string to lowercase */
 char *str_tolower (char *s)
 {
index 0f9a686..b5bf82f 100644 (file)
--- 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*);
 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*);