{ NULL, 0 }
};
+char *version=VERSION;
/* mhparse.c */
extern char *tmp; /* directory to place temp files */
if (!(cp = *argp++) || (*cp == '-' && cp[1]))
adios(EX_USAGE, NULL, "missing argument to %s",
argp[-2]);
- file = *cp == '-' ? cp : getcpy(expanddir(cp));
+ file = *cp == '-' ? cp : mh_xstrdup(expanddir(cp));
continue;
case DEBUGSW:
if (folder)
adios(EX_USAGE, NULL, "only one folder at a time!");
else
- folder = getcpy(expandfol(cp));
+ folder = mh_xstrdup(expandfol(cp));
} else
app_msgarg(&msgs, cp);
}
/*
** Cache the current directory before we do any chdirs()'s.
*/
- cwd = getcpy(pwd());
+ cwd = mh_xstrdup(pwd());
/*
** Check for storage directory. If specified,
if ((cp = context_find(nmhstorage)) && *cp)
tmp = concat(cp, "/", invo_name, NULL);
else
- tmp = getcpy(toabsdir(invo_name));
+ tmp = mh_xstrdup(toabsdir(invo_name));
if (file && msgs.size)
adios(EX_USAGE, NULL, "cannot specify msg and file at same time!");
for (ctp = cts; *ctp; ctp++)
free_content(*ctp);
- free((char *) cts);
- cts = NULL;
+ mh_free0(&cts);
/* If reading from a folder, do some updating */
if (mp) {
** store any contents.
*/
if ((cp = context_find(nmhstorage)) && *cp)
- dir = getcpy(cp);
+ dir = mh_xstrdup(cp);
else
- dir = getcpy(cwd);
+ dir = mh_xstrdup(cwd);
for (ctp = cts; *ctp; ctp++) {
ct = *ctp;
static int
store_generic(CT ct)
{
- char **ap, **vp, *cp;
+ char **ap, **vp, *cp, *filename;
CI ci = &ct->c_ctinfo;
/*
** (only the "message" subtype "rfc822" will use store_generic).
*/
if (autosw && ct->c_type != CT_MESSAGE) {
+ /* First check for "filename" in Content-Disposition header */
+ filename = extract_name_value("filename", ct->c_dispo);
+ if (filename && strcmp(filename, ct->c_dispo)!=0) {
+ /* We found "filename" */
+ cp = mhbasename(filename);
+ if (*cp && *cp!='.' && *cp!='|' && *cp!='!' &&
+ !strchr(cp, '%')) {
+ /* filename looks good: use it */
+ ct->c_storeproc = mh_xstrdup(cp);
+ goto finished;
+ }
+ }
/*
** Check the attribute/value pairs, for the attribute "name".
** If found, take the basename, do a few sanity checks and
if (*cp && *cp!='.' && *cp!='|' && *cp!='!' &&
!strchr(cp, '%')) {
/* filename looks good: use it */
- ct->c_storeproc = getcpy(cp);
+ ct->c_storeproc = mh_xstrdup(cp);
}
break;
}
}
+finished:
return store_content(ct, NULL);
}
ct = *ctq++;
if (store_content(ct, NULL) == NOTOK) {
losing:
- free((char *) base);
+ mh_free0(&base);
return NOTOK;
}
goto losing;
}
- free((char *) base);
+ mh_free0(&base);
return OK;
}
*/
if (p) {
appending = 1;
- ct->c_storage = getcpy(p->c_storage);
+ ct->c_storage = mh_xstrdup(p->c_storage);
/* record the folder name */
if (p->c_folder) {
- ct->c_folder = getcpy(p->c_folder);
+ ct->c_folder = mh_xstrdup(p->c_folder);
}
goto got_filename;
}
/* Store content in temporary file for now */
tmpfilenam = m_mktemp(invo_name, NULL, NULL);
- ct->c_storage = getcpy(tmpfilenam);
+ ct->c_storage = mh_xstrdup(tmpfilenam);
/* Get the folder name */
if (cp[1])
- folder = getcpy(expandfol(cp));
+ folder = mh_xstrdup(expandfol(cp));
else
folder = getcurfol();
create_folder(toabsdir(folder), 0, exit);
/* Record the folder name */
- ct->c_folder = getcpy(folder);
+ ct->c_folder = mh_xstrdup(folder);
if (cp[1])
- free(folder);
+ mh_free0(&folder);
goto got_filename;
}
return show_content_aux(ct, 0, buffer + 1, dir);
/* record the filename */
- ct->c_storage = getcpy(buffer);
+ ct->c_storage = mh_xstrdup(buffer);
got_filename:
/* flush the output stream */