#include <h/mh.h>
#include <fcntl.h>
-#include <h/signals.h>
#include <h/md5.h>
#include <h/mts.h>
#include <h/tws.h>
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);
+ mhstoreinfo_t info;
+ NEW(info);
info->cts = ct;
info->cwd = pwd;
info->autosw = asw;
void
mhstoreinfo_free (mhstoreinfo_t info) {
free (info->cwd);
+ free (info->dir);
free (info);
}
/* mhmisc.c */
-int part_ok (CT, int);
+int part_ok (CT);
int type_ok (CT, int);
void flush_errors (void);
-/*
- * prototypes
- */
-void store_all_messages (mhstoreinfo_t);
-
/*
* static prototypes
*/
for (part = m->mp_parts; part; part = part->mp_next) {
CT p = part->mp_part;
- if (part_ok (p, 1) && type_ok (p, 1)) {
+ if (part_ok (p) && type_ok (p, 1)) {
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;
if (result == OK && ct->c_subtype == MULTI_ALTERNATE)
break;
return NOTOK;
}
- if ((base = (CT *) calloc ((size_t) (i + 1), sizeof(*base))) == NULL)
- adios (NULL, "out of memory");
-
+ base = mh_xcalloc(i + 1, sizeof *base);
ctq = base;
for (ctp = info->cts; *ctp; ctp++) {
p = *ctp;
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;
}
} 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;
}
break;
default:
- fwrite (buffer, sizeof(*buffer), cc, fp);
+ if ((int) fwrite (buffer, sizeof(*buffer), cc, fp) < cc) {
+ advise ("output_content_file", "fwrite");
+ }
continue;
}
break;
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;
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;
}
}
if (isatty (fileno (stdin))) {
char *prompt =
concat ("Overwrite \"", file, "\" [y/n/rename]? ", NULL);
- ans = getans (prompt, answer);
+ ans = read_switch_multiword (prompt, answer);
free (prompt);
} else {
/* Overwrite, that's what nmh used to do. And warn. */
original_file = file;
} while (check_again);
- if (cwd) {
- free (cwd);
- }
+ free (cwd);
return file;
}