void content_error (char *, CT, char *, ...);
void flush_errors (void);
-/* mhlistsbr.c */
-int list_switch (CT, int, int, int, int);
-int list_content (CT, int, int, int, int);
-
/*
* prototypes
*/
static int parse_display_string (CT, char *, int *, int *, int *, int *, char *,
char *, size_t, int multipart);
static int convert_content_charset (CT, char **);
-static const char *parameter_value (CI, const char *);
static void intrser (int);
char prompt[BUFSIZ];
if (ct->c_type == CT_MULTIPART)
- list_content (ct, -1, 1, 0, 0);
+ list_content (ct, -1, 1, 0, 0, 0);
else
- list_switch (ct, -1, 1, 0, 0);
+ list_switch (ct, -1, 1, 0, 0, 0);
if (xpause && isatty (fileno (stdout))) {
int intr;
case 'a':
/* insert parameters from Content-Type field */
{
- char **ap, **ep;
+ PM pm;
char *s = "";
- for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) {
- snprintf (bp, buflen, "%s%s=\"%s\"", s, *ap, *ep);
+ for (pm = ci->ci_first_pm; pm; pm = pm->pm_next) {
+ snprintf (bp, buflen, "%s%s=\"%s\"", s, pm->pm_name,
+ get_param_value(pm, '?'));
len = strlen (bp);
bp += len;
buflen -= len;
if (closing_brace) {
const size_t param_len = closing_brace - cp - 1;
char *param = mh_xmalloc(param_len + 1);
- const char *value;
+ char *value;
(void) strncpy(param, cp + 1, param_len);
param[param_len] = '\0';
- value = parameter_value(ci, param);
+ value = get_param(ci->ci_first_pm, param, '?', 0);
free(param);
cp += param_len + 1; /* Skip both braces, too. */
/* %{param} is set in the Content-Type header.
After the break below, quote it if necessary. */
(void) strncpy(bp, value, buflen);
+ free(value);
} else {
/* %{param} not found, so skip it completely. cp
was advanced above. */
++*message_mods;
- /* Update ci_attrs. */
- src_charset = dest_charset;
-
/* Update ct->c_ctline. */
if (ct->c_ctline) {
- char *ctline =
- update_attr (ct->c_ctline, "charset=", dest_charset);
+ char *ctline = concat(" ", ct->c_ctinfo.ci_type, "/",
+ ct->c_ctinfo.ci_subtype, NULL);
+ char *outline;
+
+ replace_param(&ct->c_ctinfo.ci_first_pm,
+ &ct->c_ctinfo.ci_last_pm, "charset",
+ dest_charset, 0);
+ outline = output_params(strlen(TYPE_FIELD) + 1 + strlen(ctline),
+ ct->c_ctinfo.ci_first_pm, NULL, 0);
+ if (outline) {
+ ctline = add(outline, ctline);
+ free(outline);
+ }
free (ct->c_ctline);
ct->c_ctline = ctline;
/* Update Content-Type header field. */
for (hf = ct->c_first_hf; hf; hf = hf->next) {
if (! strcasecmp (TYPE_FIELD, hf->name)) {
- char *ctline_less_newline =
- update_attr (hf->value, "charset=", dest_charset);
- char *ctline = concat (ctline_less_newline, "\n", NULL);
- free (ctline_less_newline);
+ char *ctline = concat (ct->c_ctline, "\n", NULL);
free (hf->value);
hf->value = ctline;
}
-/*
- * If a Content-Type parameter named param exists, returns its value.
- * Otherwise, returns NULL.
- */
-static const char *
-parameter_value (CI ci, const char *param) {
- const char *value = NULL;
- char **ap, **vp;
-
- for (ap = ci->ci_attrs, vp = ci->ci_values; *ap; ++ap, ++vp) {
- if (! strcasecmp (*ap, param)) {
- value = *vp;
- break;
- }
- }
-
- return value;
-}
-
-
static void
intrser (int i)
{