X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a514b8a78c447c8abc69386bee9f2c463b1c9362..c8caafcb4a39516eaec330f9ea229ea52e5fe46b:/uip/mhstore.c?ds=inline diff --git a/uip/mhstore.c b/uip/mhstore.c index 72079a81..2b844c2a 100644 --- a/uip/mhstore.c +++ b/uip/mhstore.c @@ -1,6 +1,4 @@ - -/* - * mhstore.c -- store the contents of MIME messages +/* mhstore.c -- store the contents of MIME messages * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -29,6 +27,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 +50,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 +57,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 +69,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 +179,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]); @@ -257,7 +264,7 @@ do_cache: /* * Cache the current directory before we do any chdirs()'s. */ - cwd = add(pwd(), NULL); + cwd = mh_xstrdup(pwd()); if (!context_find ("path")) free (path ("./", TFOLDER)); @@ -269,14 +276,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 = mh_xstrdup(outfile); } } } else { @@ -306,8 +312,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++) { @@ -318,7 +323,7 @@ do_cache: if ((ct = parse_mime (msgnam))) { *ctp++ = ct; if (outfile) { - ct->c_storage = add (outfile, NULL); + ct->c_storage = mh_xstrdup(outfile); } } }