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
* length so we can allocate the correct buffer size.
*/
- for (len = 0; istoken(*vp); vp++) {
+ for (vp = dp, len = 0; istoken(*vp); vp++) {
if (*vp == '%') {
if (*(vp + 1) == '\0' ||
!isxdigit((unsigned char) *(vp + 1)) ||
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;