X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhstore.c;h=6f6746debf8ba2e56b35906d1db086649d61a78a;hp=992d429338679f79fe69b0051325eece15987f9b;hb=3410b680416c49a7617491af38bc1929855a331d;hpb=94c80042eae3383c812d9552089953f9846b1bb6 diff --git a/uip/mhstore.c b/uip/mhstore.c index 992d429..6f6746d 100644 --- a/uip/mhstore.c +++ b/uip/mhstore.c @@ -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. */