/*
* mhstoresbr.c -- routines to save/store the contents of MIME messages
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
#include <h/signals.h>
#include <h/md5.h>
#include <errno.h>
-#include <setjmp.h>
#include <signal.h>
#include <h/mts.h>
#include <h/tws.h>
#include <h/mime.h>
#include <h/mhparse.h>
+#include <h/utils.h>
/*
/* mhmisc.c */
int part_ok (CT, int);
int type_ok (CT, int);
-int make_intermediates (char *);
void flush_errors (void);
/* mhshowsbr.c */
static int ct_compar (CT *, CT *);
static int store_content (CT, CT);
static int output_content_file (CT, int);
-static int check_folder (char *);
static int output_content_folder (char *, char *);
static int parse_format_string (CT, char *, char *, int, char *);
static void get_storeproc (CT);
* Check for the directory in which to
* store any contents.
*/
- if (autosw)
- dir = getcpy (cwd);
- else if ((cp = context_find (nmhstorage)) && *cp)
+ if ((cp = context_find (nmhstorage)) && *cp)
dir = getcpy (cp);
else
dir = getcpy (cwd);
for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) {
/* check for "type=tar" attribute */
- if (!strcasecmp (*ap, "type")) {
- if (strcasecmp (*ep, "tar"))
+ if (!mh_strcasecmp (*ap, "type")) {
+ if (mh_strcasecmp (*ep, "tar"))
break;
tarP = 1;
}
/* check for "conversions=compress" attribute */
- if ((!strcasecmp (*ap, "conversions") || !strcasecmp (*ap, "x-conversions"))
- && (!strcasecmp (*ep, "compress") || !strcasecmp (*ep, "x-compress"))) {
+ if ((!mh_strcasecmp (*ap, "conversions") || !mh_strcasecmp (*ap, "x-conversions"))
+ && (!mh_strcasecmp (*ep, "compress") || !mh_strcasecmp (*ep, "x-compress"))) {
zP = 1;
continue;
}
/* check for "conversions=gzip" attribute */
- if ((!strcasecmp (*ap, "conversions") || !strcasecmp (*ap, "x-conversions"))
- && (!strcasecmp (*ep, "gzip") || !strcasecmp (*ep, "x-gzip"))) {
+ if ((!mh_strcasecmp (*ap, "conversions") || !mh_strcasecmp (*ap, "x-conversions"))
+ && (!mh_strcasecmp (*ep, "gzip") || !mh_strcasecmp (*ep, "x-gzip"))) {
gzP = 1;
continue;
}
static int
store_content (CT ct, CT p)
{
- int appending = 0, msgnum;
+ int appending = 0, msgnum = 0;
int is_partial = 0, first_partial = 0;
int last_partial = 0;
char *cp, buffer[BUFSIZ];
char *tmpfilenam, *folder;
/* Store content in temporary file for now */
- tmpfilenam = m_scratch ("", invo_name);
+ tmpfilenam = m_mktemp(invo_name, NULL, NULL);
ct->c_storage = add (tmpfilenam, NULL);
/* Get the folder name */
if (cp[1])
- folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
+ folder = pluspath (cp);
else
folder = getfolder (1);
/* Check if folder exists */
- if (check_folder (folder) == NOTOK)
- return NOTOK;
+ create_folder(m_mailpath(folder), 0, exit);
/* Record the folder name */
ct->c_folder = add (folder, NULL);
/*
- * Check if folder exists, and create
- * if necessary.
- */
-
-static int
-check_folder (char *folder)
-{
- char *folderdir;
- struct stat st;
-
- /* expand path to the folder */
- folderdir = m_mailpath (folder);
-
- /* Check if folder exists */
- if (stat (folderdir, &st) == NOTOK) {
- int answer;
- char *ep;
-
- if (errno != ENOENT) {
- advise (folderdir, "error on folder");
- return NOTOK;
- }
-
- ep = concat ("Create folder \"", folderdir, "\"? ", NULL);
- answer = getanswer (ep);
- free (ep);
-
- if (!answer)
- return NOTOK;
-
- if (!makedir (folderdir)) {
- advise (NULL, "unable to create folder %s", folderdir);
- return NOTOK;
- }
- }
-
- return OK;
-}
-
-
-/*
* Add a file to a folder.
*
* Return the new message number of the file
* the storeproc.
*/
for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) {
- if (!strcasecmp (*ap, "name")
+ if (!mh_strcasecmp (*ap, "name")
&& *(cp = *ep) != '/'
&& *cp != '.'
&& *cp != '|'
* messages are not copied.
*/
if (!uprf (hp->name, XXX_FIELD_PRF)
- && strcasecmp (hp->name, VRSN_FIELD)
- && strcasecmp (hp->name, "Subject")
- && strcasecmp (hp->name, "Encrypted")
- && strcasecmp (hp->name, "Message-ID"))
+ && mh_strcasecmp (hp->name, VRSN_FIELD)
+ && mh_strcasecmp (hp->name, "Subject")
+ && mh_strcasecmp (hp->name, "Encrypted")
+ && mh_strcasecmp (hp->name, "Message-ID"))
fprintf (out, "%s:%s", hp->name, hp->value);
hp = hp->next; /* next header field */
}