stupid off by one: skip the last ')' in a comment !
[apps/madmutt.git] / lib-mime / rfc2231.c
index 865877d..287c1d6 100644 (file)
  *
  */
 
  *
  */
 
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
-#include <lib-lib/ascii.h>
+#include <lib-lib/lib-lib.h>
 
 #include <lib-mime/mime.h>
 
 #include "charset.h"
 
 #include <lib-mime/mime.h>
 
 #include "charset.h"
+#include "mutt.h"
 
 typedef struct rfc2231_param {
     struct rfc2231_param *next;
 
 typedef struct rfc2231_param {
     struct rfc2231_param *next;
@@ -133,15 +128,14 @@ rfc2231_list_insert(rfc2231_param **list, rfc2231_param *par)
     *list = par;
 }
 
     *list = par;
 }
 
-static void purge_empty_parameters(PARAMETER **headp)
+static void purge_empty_parameters(parameter_t **headp)
 {
     while (*headp) {
 {
     while (*headp) {
-        PARAMETER *p = *headp;
+        parameter_t *p = *headp;
 
         if (!p->attribute || !p->value) {
 
         if (!p->attribute || !p->value) {
-            *headp = p->next;
-            p->next = NULL;
-            mutt_free_parameter(&p);
+            p = parameter_list_pop(headp);
+            parameter_delete(&p);
         } else {
             headp = &(*headp)->next;
         }
         } else {
             headp = &(*headp)->next;
         }
@@ -151,7 +145,7 @@ static void purge_empty_parameters(PARAMETER **headp)
 /* process continuation parameters */
 /* XXX: MC: not read */
 static void
 /* process continuation parameters */
 /* XXX: MC: not read */
 static void
-rfc2231_join_continuations(PARAMETER **head, rfc2231_param *par)
+rfc2231_join_continuations(parameter_t **head, rfc2231_param *par)
 {
     rfc2231_param *q;
 
 {
     rfc2231_param *q;
 
@@ -181,7 +175,7 @@ rfc2231_join_continuations(PARAMETER **head, rfc2231_param *par)
             vl = m_strlen(par->value);
 
             p_realloc(&value, l + vl + 1);
             vl = m_strlen(par->value);
 
             p_realloc(&value, l + vl + 1);
-            strcpy (value + l, par->value);   /* __STRCPY_CHECKED__ */
+            m_strcpy(value + l, vl + 1, par->value);
             l += vl;
 
             q = par->next;
             l += vl;
 
             q = par->next;
@@ -193,7 +187,7 @@ rfc2231_join_continuations(PARAMETER **head, rfc2231_param *par)
         if (value) {
             if (encoded)
                 mutt_convert_string (&value, charset, Charset, M_ICONV_HOOK_FROM);
         if (value) {
             if (encoded)
                 mutt_convert_string (&value, charset, Charset, M_ICONV_HOOK_FROM);
-            *head = mutt_new_parameter ();
+            *head = parameter_new();
             (*head)->attribute = m_strdup(attribute);
             (*head)->value = value;
             head = &(*head)->next;
             (*head)->attribute = m_strdup(attribute);
             (*head)->value = value;
             head = &(*head)->next;
@@ -206,11 +200,11 @@ rfc2231_join_continuations(PARAMETER **head, rfc2231_param *par)
 /****************************************************************************/
 
 /* XXX: MC: not read */
 /****************************************************************************/
 
 /* XXX: MC: not read */
-void rfc2231_decode_parameters (PARAMETER ** headp)
+void rfc2231_decode_parameters (parameter_t ** headp)
 {
 {
-    PARAMETER *head = NULL;
-    PARAMETER **last;
-    PARAMETER *p, *q;
+    parameter_t *head = NULL;
+    parameter_t **last;
+    parameter_t *p, *q;
 
     rfc2231_param *conthead = NULL;
     rfc2231_param *conttmp;
 
     rfc2231_param *conthead = NULL;
     rfc2231_param *conttmp;
@@ -220,9 +214,7 @@ void rfc2231_decode_parameters (PARAMETER ** headp)
 
     int encoded;
     int idx;
 
     int encoded;
     int idx;
-    short dirty = 0;              /* set to 1 when we may have created
-                                   * empty parameters.
-                                   */
+    short dirty = 0;   /* 1 when we may have created empty parameters. */
 
     if (!headp)
         return;
 
     if (!headp)
         return;
@@ -241,11 +233,11 @@ void rfc2231_decode_parameters (PARAMETER ** headp)
              * Internet Gateways.  So we actually decode it.
              */
 
              * Internet Gateways.  So we actually decode it.
              */
 
-            if (option (OPTRFC2047PARAMS) && p->value && strstr (p->value, "=?"))
-                rfc2047_decode (&p->value);
-            else if (!option (OPTSTRICTMIME)) {
-                if (ascii_strcasecmp (AssumedCharset, "us-ascii"))
-                    mutt_convert_nonmime_string (&p->value);
+            if (p->value && strstr(p->value, "=?")) {
+                rfc2047_decode(&p->value);
+            } else {
+                if (mime_which_token(AssumedCharset, -1) == MIME_US_ASCII)
+                    mutt_convert_nonmime_string(&p->value);
             }
 
             *last = p;
             }
 
             *last = p;
@@ -306,7 +298,7 @@ int rfc2231_encode_string(char **s)
     char *charset = NULL;
     char *e, *p, *t, *d = NULL;
     int escapes = 0;
     char *charset = NULL;
     char *e, *p, *t, *d = NULL;
     int escapes = 0;
-    size_t dlen = 0;
+    ssize_t dlen = 0;
 
     /*
      * A shortcut to detect pure 7bit data.
 
     /*
      * A shortcut to detect pure 7bit data.