]> diplodocus.org Git - nmh/blobdiff - uip/mhparse.c
Compare character with EOF using signed comparison because
[nmh] / uip / mhparse.c
index 943e4233325b0a2dcf706d2a78283c94aa6cbf51..59f8b2218344ed55b3b42625c4b40c4ce347aa7e 100644 (file)
@@ -3647,6 +3647,25 @@ bad_quote:
     return OK;
 }
 
     return OK;
 }
 
+/*
+ * Return the charset for a particular content type.  Return pointer is
+ * only valid until the next call to content_charset().
+ */
+
+char *
+content_charset (CT ct) {
+    static char *ret_charset = NULL;
+
+    if (ret_charset != NULL) {
+       free(ret_charset);
+    }
+
+    ret_charset = get_param(ct->c_ctinfo.ci_first_pm, "charset", '?', 0);
+
+    return ret_charset ? ret_charset : "US-ASCII";
+}
+
+
 /*
  * Create a string based on a list of output parameters.  Assume that this
  * parameter string will be appended to an existing header, so start out
 /*
  * Create a string based on a list of output parameters.  Assume that this
  * parameter string will be appended to an existing header, so start out
@@ -4074,6 +4093,33 @@ add_param(PM *first, PM *last, char *name, char *value, int nocopy)
     return pm;
 }
 
     return pm;
 }
 
+/*
+ * Either replace a current parameter with a new value, or add the parameter
+ * to the parameter linked list.
+ */
+
+PM
+replace_param(PM *first, PM *last, char *name, char *value, int nocopy)
+{
+    PM pm;
+
+    for (pm = *first; pm != NULL; pm = pm->pm_next) {
+       if (strcasecmp(name, pm->pm_name) == 0) {
+           /*
+            * If nocopy is set, it's assumed that we own both name
+            * and value.  We don't need name, so we discard it now.
+            */
+           if (nocopy)
+               free(name);
+           free(pm->pm_value);
+           pm->pm_value = nocopy ? value : getcpy(value);
+           return pm;
+       }
+    }
+
+    return add_param(first, last, name, value, nocopy);
+}
+
 /*
  * Retrieve a parameter value from a parameter linked list.  If the parameter
  * value needs converted to the local character set, do that now.
 /*
  * Retrieve a parameter value from a parameter linked list.  If the parameter
  * value needs converted to the local character set, do that now.
@@ -4109,7 +4155,10 @@ char *get_param_value(PM pm, char replace)
     int utf8;
     iconv_t cd;
     ICONV_CONST char *p;
     int utf8;
     iconv_t cd;
     ICONV_CONST char *p;
+#else /* HAVE_ICONV */
+    char *p;
 #endif /* HAVE_ICONV */
 #endif /* HAVE_ICONV */
+
     char *q;
 
     /*
     char *q;
 
     /*
@@ -4184,9 +4233,10 @@ char *get_param_value(PM pm, char replace)
     *q = '\0';
 
     return buffer;
     *q = '\0';
 
     return buffer;
-#endif /* HAVE_ICONV */
 
 noiconv:
 
 noiconv:
+#endif /* HAVE_ICONV */
+
     /*
      * Take everything non-ASCII and substituite the replacement character
      */
     /*
      * Take everything non-ASCII and substituite the replacement character
      */