if (ct->c_dispo_type &&
!get_param(ct->c_dispo_first, "filename", '_', 1)) {
add_param(&ct->c_dispo_first, &ct->c_dispo_last, "filename",
- r1bindex(ci->ci_magic, '/'));
+ r1bindex(ci->ci_magic, '/'), 0);
}
}
else
*/
if (index == 0) {
vp = dp;
- while (*vp != '\'' && !isspace((unsigned char) *vp))
+ while (*vp != '\'' && !isspace((unsigned char) *vp) &&
+ *vp != '\0')
vp++;
if (*vp == '\'') {
if (vp != dp) {
free(nameptr);
return NOTOK;
}
- }
+ dp = vp;
- vp = (dp = vp);
- while (*vp != '\'' && !isspace((unsigned char) *vp))
- vp++;
+ while (*vp != '\'' && !isspace((unsigned char) *vp) &&
+ *vp != '\0')
+ vp++;
- if (*vp == '\'') {
- if (vp != dp) {
- len = vp - dp;
- lang = mh_xmalloc(len + 1);
- strncpy(lang, dp, len);
- lang[len] = '\0';
+ if (*vp == '\'') {
+ if (vp != dp) {
+ len = vp - dp;
+ lang = mh_xmalloc(len + 1);
+ strncpy(lang, dp, len);
+ lang[len] = '\0';
+ } else {
+ lang = NULL;
+ }
+ vp++;
} else {
- lang = NULL;
+ advise(NULL, "missing language tag in message %s's %s: "
+ "field\n%*s(parameter %s)", filename, fieldname,
+ strlen(invo_name) + 2, "", nameptr);
+ free(nameptr);
+ if (charset)
+ free(charset);
+ return NOTOK;
}
- vp++;
- } else {
- advise(NULL, "missing language tag in message %s's %s: "
- "field\n%*s(parameter %s)", filename, fieldname,
- strlen(invo_name) + 2, "", nameptr);
- free(nameptr);
- if (charset)
- free(charset);
- return NOTOK;
+
+ dp = vp;
}
/*
* length so we can allocate the correct buffer size.
*/
- for (dp = vp, len = 0; *vp != '\0' && !isspace((unsigned char) *vp);
- vp++) {
+ for (vp = dp, len = 0; istoken(*vp); vp++) {
if (*vp == '%') {
if (*(vp + 1) == '\0' ||
!isxdigit((unsigned char) *(vp + 1)) ||
up = valptr = mh_xmalloc(len + 1);
- for (vp = dp; *vp != '\0' && !isspace((unsigned char) *vp); vp++) {
+ for (vp = dp; istoken(*vp); vp++) {
if (*vp == '%') {
*up++ = decode_qp(*(vp + 1), *(vp + 2));
vp += 2;
pp->lang = lang;
}
} else {
- pm = add_param(param_head, param_tail, nameptr, valptr);
- free(nameptr);
- free(valptr);
+ pm = add_param(param_head, param_tail, nameptr, valptr, 1);
pm->pm_charset = charset;
pm->pm_lang = lang;
}
p[tlen] = '\0';
- pm = add_param(param_head, param_tail, pp->name, p);
+ pm = add_param(param_head, param_tail, pp->name, p, 1);
pm->pm_charset = pp->charset;
pm->pm_lang = pp->lang;
- free(pp->name);
- free(p);
pp2 = pp->next;
free(pp);
pp = pp2;
*/
PM
-add_param(PM *first, PM *last, const char *name, const char *value)
+add_param(PM *first, PM *last, char *name, char *value, int nocopy)
{
PM pm = mh_xmalloc(sizeof(*pm));
memset(pm, 0, sizeof(*pm));
- pm->pm_name = getcpy(name);
- pm->pm_value = getcpy(value);
+ pm->pm_name = nocopy ? name : getcpy(name);
+ pm->pm_value = nocopy ? value : getcpy(value);
if (*first) {
(*last)->pm_next = pm;