X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/6779979cf3a57b458d28e4d1aaac026a61d73572..c87ca5cca:/uip/mhstoresbr.c?ds=sidebyside diff --git a/uip/mhstoresbr.c b/uip/mhstoresbr.c index 6fb9d856..ae835fbf 100644 --- a/uip/mhstoresbr.c +++ b/uip/mhstoresbr.c @@ -41,8 +41,6 @@ struct mhstoreinfo { enum clobber_policy_t clobber_policy; /* -clobber selection */ }; -typedef struct mhstoreinfo *mhstoreinfo_t; - mhstoreinfo_t mhstoreinfo_create (CT *ct, char *pwd, const char *csw, int asw, int vsw) { mhstoreinfo_t info = mh_xmalloc (sizeof *info); @@ -61,6 +59,7 @@ mhstoreinfo_create (CT *ct, char *pwd, const char *csw, int asw, int vsw) { void mhstoreinfo_free (mhstoreinfo_t info) { free (info->cwd); + free (info->dir); free (info); } @@ -82,11 +81,6 @@ int part_ok (CT, int); int type_ok (CT, int); void flush_errors (void); -/* - * prototypes - */ -void store_all_messages (mhstoreinfo_t); - /* * static prototypes */ @@ -298,10 +292,9 @@ store_multi (CT ct, mhstoreinfo_t info) /* Support mhstore -outfile. The MIME parser doesn't load c_storage, so we know that p->c_storage is NULL here. */ - p->c_storage = ct->c_storage; + p->c_storage = add (ct->c_storage, NULL); } result = store_switch (p, info); - p->c_storage = NULL; if (result == OK && ct->c_subtype == MULTI_ALTERNATE) break; @@ -352,7 +345,7 @@ store_partial (CT ct, mhstoreinfo_t info) return NOTOK; } - if ((base = (CT *) calloc ((size_t) (i + 1), sizeof(*base))) == NULL) + if ((base = (CT *) mh_xcalloc ((size_t) (i + 1), sizeof(*base))) == NULL) adios (NULL, "out of memory"); ctq = base; @@ -465,10 +458,9 @@ store_external (CT ct, mhstoreinfo_t info) if (ct->c_storage) { /* Support mhstore -outfile. The MIME parser doesn't load c_storage, so we know that p->c_storage is NULL here. */ - p->c_storage = ct->c_storage; + p->c_storage = add (ct->c_storage, NULL); } result = store_switch (p, info); - p->c_storage = NULL; p->c_partno = NULL; return result; @@ -566,13 +558,9 @@ store_content (CT ct, CT p, mhstoreinfo_t info) if ((cp = ct->c_storeproc) == NULL || *cp == '\0') { CI ci = &ct->c_ctinfo; - snprintf (buffer, sizeof(buffer), "%s-store-%s/%s", - invo_name, ci->ci_type, ci->ci_subtype); - if ((cp = context_find (buffer)) == NULL || *cp == '\0') { - snprintf (buffer, sizeof(buffer), "%s-store-%s", invo_name, ci->ci_type); - if ((cp = context_find (buffer)) == NULL || *cp == '\0') { - cp = ct->c_type == CT_MESSAGE ? "+" : "%m%P.%s"; - } + cp = context_find_by_type ("store", ci->ci_type, ci->ci_subtype); + if (cp == NULL) { + cp = ct->c_type == CT_MESSAGE ? "+" : "%m%P.%s"; } } @@ -629,7 +617,7 @@ store_content (CT ct, CT p, mhstoreinfo_t info) } } else { /* The output filename was explicitly specified, so use it. */ - if ((ct->c_storage = clobber_check (add (ct->c_storage, NULL), info)) == + if ((ct->c_storage = clobber_check (ct->c_storage, info)) == NULL) { return NOTOK; } @@ -787,7 +775,9 @@ losing: break; default: - fwrite (buffer, sizeof(*buffer), cc, fp); + if ((int) fwrite (buffer, sizeof(*buffer), cc, fp) < cc) { + advise ("output_content_file", "fwrite"); + } continue; } break; @@ -1242,6 +1232,10 @@ clobber_check (char *original_file, mhstoreinfo_t info) { char *cwd = NULL; int check_again; + if (! strcmp (original_file, "-")) { + return original_file; + } + if (info->clobber_policy == NMH_CLOBBER_ASK) { /* Save cwd for possible use in loop below. */ char *slash; @@ -1252,7 +1246,9 @@ clobber_check (char *original_file, mhstoreinfo_t info) { if (slash) { *slash = '\0'; } else { - /* original_file wasn't a full path, which shouldn't happen. */ + /* original_file isn't a full path, which should only happen if + it is -. */ + free (cwd); cwd = NULL; } } @@ -1352,9 +1348,7 @@ clobber_check (char *original_file, mhstoreinfo_t info) { original_file = file; } while (check_again); - if (cwd) { - free (cwd); - } + free (cwd); return file; }