]> git.marmaro.de Git - mmh/commitdiff
Augmented new_fs() with an additional argument for a default form.
authormarkus schnalke <meillo@marmaro.de>
Thu, 9 Feb 2012 18:31:44 +0000 (19:31 +0100)
committermarkus schnalke <meillo@marmaro.de>
Thu, 9 Feb 2012 18:31:44 +0000 (19:31 +0100)
This balances the arguments: user-form, user-string, def-form, def-string.
In comp.c I've already replaced open_form() with new_fs(). forw.c and
dist.c are to follow.

14 files changed:
h/fmt_scan.h
h/prototypes.h
sbr/fmt_new.c
uip/ap.c
uip/comp.c
uip/dp.c
uip/fmtdump.c
uip/forw.c
uip/inc.c
uip/mhlsbr.c
uip/rcvdist.c
uip/rcvtty.c
uip/repl.c
uip/scan.c

index 38e27934be1680235e6a7787f70891a04373b61d..713c89b265f51a0ac2350e8dcff6073ccbb1ccaf 100644 (file)
@@ -88,5 +88,5 @@ struct format {
 ** prototypes
 */
 struct format *fmt_scan(struct format *, char *, int, int *);
-char *new_fs(char *, char *, char *);
+char *new_fs(char *, char *, char *, char *);
 int fmt_compile(char *, struct format **);
index 00768e5df9b564f0b72bd4a2f7500bc6707b69a9..01c6a5928a2af08a8eeabb91cacb991598e9dd13 100644 (file)
@@ -80,7 +80,7 @@ void m_unknown(FILE *);
 int makedir(char *);
 char *nmh_getpass(const char *);
 char *norm_charmap(char *);
-char *new_fs(char *, char *, char *);
+char *new_fs(char *, char *, char *, char *);
 int peekc(FILE *ib);
 int pidwait(pid_t, int);
 int pidstatus(int, FILE *, char *);
index 9d818742e8f5c920c60743307d8afa978ff9e80e..6cdcfcc7075db5fcb09d9e48066c4973eedcdb4c 100644 (file)
@@ -18,11 +18,10 @@ static void normalize(char *);
 
 
 /*
-** Copy format string (selected by precedence) and store in static memory.
-** Normalize it.
+** Copy first available format string, store in static memory and normalize it.
 */
 char *
-new_fs(char *form, char *format, char *default_fs)
+new_fs(char *form, char *format, char *def_form, char *default_fs)
 {
        struct stat st;
        register FILE *fp;
@@ -48,6 +47,20 @@ new_fs(char *form, char *format, char *default_fs)
        } else if (format) {
                formats = getcpy(format);
 
+       } else if (def_form) {
+               if ((fp = fopen(etcpath(def_form), "r")) == NULL) {
+                       adios(def_form, "unable to open format file");
+               }
+               if (fstat(fileno(fp), &st) == -1) {
+                       adios(def_form, "unable to stat format file");
+               }
+               formats = mh_xmalloc((size_t) st.st_size + 1);
+               if (read(fileno(fp), formats, (int)st.st_size) != st.st_size) {
+                       adios(def_form, "error reading format file");
+               }
+               formats[st.st_size] = '\0';
+               fclose(fp);
+
        } else {
                formats = getcpy(default_fs);
        }
index e444cd89566176e3d37795e070e3fb910502397a..a4e218946f0cfda7e0879b62ec8b909241fbb97c 100644 (file)
--- a/uip/ap.c
+++ b/uip/ap.c
@@ -124,7 +124,7 @@ main(int argc, char **argv)
                adios(NULL, "usage: %s [switches] addrs ...", invo_name);
 
        /* get new format string */
-       nfs = new_fs(form, format, FORMAT);
+       nfs = new_fs(form, format, NULL, FORMAT);
 
        if (width == 0) {
                if ((width = sc_width()) < WIDTH / 2)
index ce76cd856d8bac8789968d07c67fb2f0dd959d71..6508ba67a7508fccea72241ad9c3d311aaad1d8d 100644 (file)
@@ -43,6 +43,8 @@ main(int argc, char **argv)
        char *folder = NULL, *msg = NULL, buf[BUFSIZ];
        char drft[BUFSIZ], **argp, **arguments;
        struct msgs *mp = NULL;
+       char *nfs;
+
 
 #ifdef LOCALE
        setlocale(LC_ALL, "");
@@ -162,14 +164,14 @@ main(int argc, char **argv)
                close(out);
 
        } else {
-               in = open_form(&form, components);
-
+               nfs = new_fs(form, NULL, components, NULL);
                strncpy(drft, m_draft(seq_beyond), sizeof(drft));
                if ((out = creat(drft, m_gmprot())) == NOTOK) {
                        adios(drft, "unable to create");
                }
-               cpydata(in, out, form, drft);
-               close(in);
+               if (write(out, nfs, strlen(nfs)) != strlen(nfs)) {
+                       adios(drft, "error writing");
+               }
                close(out);
        }
 
index d5f0c599d6d749116fefd94245242c785bc2045a..a9940d3a9115f14c1a593ac79116392d816de013 100644 (file)
--- a/uip/dp.c
+++ b/uip/dp.c
@@ -114,7 +114,7 @@ main(int argc, char **argv)
                adios(NULL, "usage: %s [switches] dates ...", invo_name);
 
        /* get new format string */
-       nfs = new_fs(form, format, FORMAT);
+       nfs = new_fs(form, format, NULL, FORMAT);
 
        if (width == 0) {
                if ((width = sc_width()) < WIDTH / 2)
index d948a063d8f4372d9391a9f8577eb2b10252e1ba..75ac4c21a4ed5da8a2a31214689c2f90ea4d4802 100644 (file)
@@ -102,7 +102,7 @@ main(int argc, char **argv)
        /*
        ** Get new format string.  Must be before chdir().
        */
-       nfs = new_fs(form, format, FORMAT);
+       nfs = new_fs(form, format, NULL, FORMAT);
        ncomps = fmt_compile(nfs, &fmt);
 
        fmt_dump(fmt);
index b84632bd1a5c4347cb85191a0538e54e13c67e70..feb60f96ade31604f9b0d98c1dc41b7917513fbd 100644 (file)
@@ -304,7 +304,7 @@ build_form(char *form, char *digest, int volume, int issue)
        char *cp = NULL;
 
        /* Get new format string */
-       nfs = new_fs(form, NULL, NULL);
+       nfs = new_fs(form, NULL, NULL, NULL);
        fmtsize = strlen(nfs) + 256;
 
        /* Compile format string */
index 587bd846df21b930424bd3d934a86545a46222c2..762a858d6ad59bf9c16e656996fa8f4e6846cac0 100644 (file)
--- a/uip/inc.c
+++ b/uip/inc.c
@@ -373,7 +373,7 @@ main(int argc, char **argv)
 #endif /* MHE */
 
        /* Get new format string */
-       nfs = new_fs(form, format, FORMAT);
+       nfs = new_fs(form, format, NULL, FORMAT);
 
        if (noisy) {
                printf("Incorporating new mail into %s...\n\n", folder);
index 15360eaf67cd57d557183ca6847672938eb98028..218d38d557788bdfa1ca0f5be301722efcf0c620 100644 (file)
@@ -659,7 +659,7 @@ evalvar(struct mcomp *c1)
 
                if (ptos(name, &cp))
                        return 1;
-               nfs = new_fs(NULL, NULL, cp);
+               nfs = new_fs(NULL, NULL, NULL, cp);
                c1->c_nfs = getcpy(nfs);
                c1->c_flags |= FORMAT;
                return 0;
@@ -668,7 +668,7 @@ evalvar(struct mcomp *c1)
        if (!mh_strcasecmp(name, "decode")) {
                char *nfs;
 
-               nfs = new_fs(NULL, NULL, "%(decode{text})");
+               nfs = new_fs(NULL, NULL, NULL, "%(decode{text})");
                c1->c_nfs = getcpy(nfs);
                c1->c_flags |= FORMAT;
                return 0;
index 338455f931bfcd32ec74fc9e27df1d2e007b42b5..9adb5d4752fd7e6724e0e984c00d6586dfb1d415 100644 (file)
@@ -171,7 +171,7 @@ rcvdistout(FILE *inb, char *form, char *addrs)
                adios(drft, "unable to create");
 
        /* get new format string */
-       cp = new_fs(form ? form : rcvdistcomps, NULL, NULL);
+       cp = new_fs(form ? form : rcvdistcomps, NULL, NULL, NULL);
        format_len = strlen(cp);
        ncomps = fmt_compile(cp, &fmt) + 1;
        if (!(nxtbuf = compbuffers =
index 86066ed58fcc59352e2898c90d57906c94b8a73d..99ae680602871039123f49574cd56cf45b789fa0 100644 (file)
@@ -292,7 +292,7 @@ header_fd(void)
        rewind(stdin);
 
        /* get new format string */
-       nfs = new_fs(form, format, SCANFMT);
+       nfs = new_fs(form, format, NULL, SCANFMT);
        scan(stdin, 0, 0, nfs, width, 0, 0, NULL, 0L, 0);
        if (newline)
                write(fd, "\n\r", 2);
index 4e2c18ae1a9846de80e4bad84bf0bcd4e5e758de..5943857c0d92f55238785c78ef8c68e97537f468 100644 (file)
@@ -424,7 +424,7 @@ replout(FILE *inb, char *msg, char *drft, struct msgs *mp,
        umask(mask);
 
        /* get new format string */
-       cp = new_fs(form, NULL, NULL);
+       cp = new_fs(form, NULL, NULL, NULL);
        format_len = strlen(cp);
 
        /* compile format string */
index d228c717128f0add4af4031ec169c1059806be78..f8e2e116226db26238dc16ee46aa1b1f0bbf3d94 100644 (file)
@@ -133,7 +133,7 @@ main(int argc, char **argv)
        /*
        ** Get new format string.  Must be before chdir().
        */
-       nfs = new_fs(form, format, FORMAT);
+       nfs = new_fs(form, format, NULL, FORMAT);
 
        /*
        ** We are scanning a maildrop file