X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a514b8a78c447c8abc69386bee9f2c463b1c9362..ef1ba39e8dae81091b6c3e73e72825ef6edea3c6:/uip/mhstore.c?ds=sidebyside diff --git a/uip/mhstore.c b/uip/mhstore.c index 72079a81..183fe7d4 100644 --- a/uip/mhstore.c +++ b/uip/mhstore.c @@ -29,6 +29,7 @@ X("outfile outfile", 0, OUTFILESW) \ X("part number", 0, PARTSW) \ X("type content", 0, TYPESW) \ + X("prefer content", 0, PREFERSW) \ X("rcache policy", 0, RCACHESW) \ X("wcache policy", 0, WCACHESW) \ X("version", 0, VERSIONSW) \ @@ -51,12 +52,6 @@ extern int wcachesw; extern char *cache_public; extern char *cache_private; -/* mhstoresbr.c */ -typedef struct mhstoreinfo *mhstoreinfo_t; -mhstoreinfo_t mhstoreinfo_create(CT *, char *, const char *, int, int); -int mhstoreinfo_files_not_clobbered(const mhstoreinfo_t); -void mhstoreinfo_free(mhstoreinfo_t); - /* mhmisc.c */ extern int npart; extern int ntype; @@ -64,6 +59,11 @@ extern char *parts[NPARTS + 1]; extern char *types[NTYPES + 1]; extern int userrs; +/* mhparse.c */ +extern char *preferred_types[]; +extern char *preferred_subtypes[]; +extern int npreferred; + #define quitser pipeser /* mhparse.c */ @@ -71,13 +71,10 @@ int debugsw = 0; CT parse_mime (char *); /* mhmisc.c */ -int part_ok (CT, int); +int part_ok (CT); int type_ok (CT, int); void flush_errors (void); -/* mhstoresbr.c */ -void store_all_messages (mhstoreinfo_t); - /* mhfree.c */ extern CT *cts; void freects_done (int) NORETURN; @@ -184,6 +181,18 @@ do_cache: types[ntype++] = cp; continue; + case PREFERSW: + if (!(cp = *argp++) || *cp == '-') + adios (NULL, "missing argument to %s", argp[-2]); + if (npreferred >= NPREFS) + adios (NULL, "too many preferred types (starting with %s), %d max", + cp, NPREFS); + preferred_types[npreferred] = cp; + cp = strchr(cp, '/'); + if (cp) *cp++ = '\0'; + preferred_subtypes[npreferred++] = cp; + continue; + case FILESW: if (!(cp = *argp++) || (*cp == '-' && cp[1])) adios (NULL, "missing argument to %s", argp[-2]); @@ -269,14 +278,13 @@ do_cache: * check if message is coming from file */ if (file) { - if (!(cts = (CT *) calloc ((size_t) 2, sizeof(*cts)))) - adios (NULL, "out of memory"); + cts = mh_xcalloc(2, sizeof *cts); ctp = cts; if ((ct = parse_mime (file))) { *ctp++ = ct; if (outfile) { - ct->c_storage = outfile; + ct->c_storage = add (outfile, NULL); } } } else { @@ -306,8 +314,7 @@ do_cache: done (1); seq_setprev (mp); /* set the previous-sequence */ - if (!(cts = (CT *) calloc ((size_t) (mp->numsel + 1), sizeof(*cts)))) - adios (NULL, "out of memory"); + cts = mh_xcalloc(mp->numsel + 1, sizeof *cts); ctp = cts; for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {