Remove RCS keywords, since they no longer work after git migration.
[mmh] / sbr / fmt_rfc2047.c
index 9f5b26d..6f208a1 100644 (file)
@@ -2,14 +2,13 @@
 /*
  * fmt_rfc2047.c -- decode RFC-2047 header format 
  *
- * $Id$
- *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
  * complete copyright information.
  */
 
 #include <h/mh.h>
+#include <h/utils.h>
 #ifdef HAVE_ICONV
 #  include <iconv.h>
 #  include <errno.h>
@@ -70,7 +69,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen)
     int whitespace = 0;                /* how much whitespace between encodings? */
 #ifdef HAVE_ICONV
     int use_iconv = 0;          /* are we converting encoding with iconv? */
-    iconv_t cd;
+    iconv_t cd = NULL;
     int fromutf8 = 0;
     char *saveq, *convbuf = NULL;
     size_t savedstlen;
@@ -134,7 +133,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen)
                /* .. it can't. We'll use iconv then. */
                *pp = '\0';
                cd = iconv_open(get_charset(), startofmime);
-               fromutf8 = !strcasecmp(startofmime, "UTF-8");
+               fromutf8 = !mh_strcasecmp(startofmime, "UTF-8");
                *pp = '?';
                 if (cd == (iconv_t)-1) continue;
                use_iconv = 1;
@@ -195,11 +194,19 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen)
            }
 
 #ifdef HAVE_ICONV
+           /*
+            * empty encoded text. This ensures that we don't
+            * malloc 0 bytes but skip on to the end
+            */
+           if (endofmime == startofmime && use_iconv) {
+               use_iconv = 0;
+               iconv_close(cd);
+            }
+
            if (use_iconv) {
                saveq = q;
                savedstlen = dstlen;
-               if (!(q = convbuf = (char *)malloc(endofmime - startofmime)))
-                   continue;
+                q = convbuf = (char *) mh_xmalloc(endofmime - startofmime);
             }
 /* ADDCHR2 is for adding characters when q is or might be convbuf:
  * in this case on buffer-full we want to run iconv before returning.