mhstore: Made -auto the default.
[mmh] / uip / mhstore.c
index 992d429..6f6746d 100644 (file)
@@ -71,7 +71,7 @@ void freects_done(int) NORETURN;
 */
 static void pipeser(int);
 
-int autosw = 0;
+int autosw = 1;
 
 /*
 ** Cache of current directory.  This must be
@@ -114,7 +114,6 @@ static int store_content(CT, CT);
 static int output_content_file(CT, int);
 static int output_content_folder(char *, char *);
 static int parse_format_string(CT, char *, char *, int, char *);
-static void get_storeproc(CT);
 static int copy_some_headers(FILE *, CT);
 static void store_all_messages(CT *);
 
@@ -383,8 +382,6 @@ store_all_messages(CT *cts)
        ** Check for the directory in which to
        ** store any contents.
        */
-       if (autosw)
-               dir = getcpy(cwd);
        if ((cp = context_find(nmhstorage)) && *cp)
                dir = getcpy(cp);
        else
@@ -473,13 +470,32 @@ store_switch(CT ct)
 static int
 store_generic(CT ct)
 {
+       char **ap, **ep, *cp;
+       CI ci = &ct->c_ctinfo;
+
        /*
-       ** Check if the content specifies a filename.
+       ** Check if the content specifies a filename in its MIME parameters.
        ** Don't bother with this for type "message"
-       ** (only "message/rfc822" will use store_generic).
+       ** (only the "message" subtype "rfc822" will use store_generic).
+       ** The storeproc may already be defined, if this content
+       ** is part of a "message/external", for instance.
        */
-       if (autosw && ct->c_type != CT_MESSAGE)
-               get_storeproc(ct);
+       if (autosw && ct->c_type != CT_MESSAGE && !ct->c_storeproc) {
+               /*
+               ** Check the attribute/value pairs, for the attribute "name".
+               ** If found, do a few sanity checks and copy the value into
+               ** the storeproc.
+               */
+               for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) {
+                       if (mh_strcasecmp(*ap, "name")==0 &&
+                                       *(cp = *ep) != '/' && *cp != '.' &&
+                                       *cp != '|' && *cp != '!' &&
+                                       !strchr(cp, '%')) {
+                               ct->c_storeproc = getcpy(cp);
+                               break;
+                       }
+               }
+       }
 
        return store_content(ct, NULL);
 }
@@ -1230,41 +1246,6 @@ raw:
 
 
 /*
-** Check if the content specifies a filename
-** in its MIME parameters.
-*/
-
-static void
-get_storeproc(CT ct)
-{
-       char **ap, **ep, *cp;
-       CI ci = &ct->c_ctinfo;
-
-       /*
-       ** If the storeproc has already been defined,
-       ** we just return (for instance, if this content
-       ** is part of a "message/external".
-       */
-       if (ct->c_storeproc)
-               return;
-
-       /*
-       ** Check the attribute/value pairs, for the attribute "name".
-       ** If found, do a few sanity checks and copy the value into
-       ** the storeproc.
-       */
-       for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) {
-               if (!mh_strcasecmp(*ap, "name") && *(cp = *ep) != '/' &&
-                               *cp != '.' && *cp != '|' && *cp != '!' &&
-                               !strchr(cp, '%')) {
-                       ct->c_storeproc = getcpy(cp);
-                       return;
-               }
-       }
-}
-
-
-/*
 ** Copy some of the header fields of the initial message/partial
 ** message into the header of the reassembled message.
 */