]> diplodocus.org Git - nmh/blobdiff - uip/slocal.c
Added exit to test-ali, temporarily, to isolate failure on
[nmh] / uip / slocal.c
index d8d427a4e4dcfa9382b431b831535d36a587ee47..3c5e512d1838be6076619634d4b4728c0d98651a 100644 (file)
 #include <utmpx.h>
 #endif /* HAVE_GETUTXENT */
 
-static struct swit switches[] = {
-#define        ADDRSW         0
-    { "addr address", 0 },
-#define        USERSW         1
-    { "user name", 0 },
-#define        FILESW         2
-    { "file file", 0 },
-#define        SENDERSW       3
-    { "sender address", 0 },
-#define        MAILBOXSW      4
-    { "mailbox file", 0 },
-#define        HOMESW         5
-    { "home directory", -4 },
-#define        INFOSW         6
-    { "info data", 0 },
-#define        MAILSW         7
-    { "maildelivery file", 0 },
-#define        VERBSW         8
-    { "verbose", 0 },
-#define        NVERBSW        9
-    { "noverbose", 0 },
-#define SUPPRESSDUP   10
-    { "suppressdup", 0 },
-#define NSUPPRESSDUP 11
-    { "nosuppressdup", 0 },
-#define        DEBUGSW       12
-    { "debug", 0 },
-#define VERSIONSW     13
-    { "version", 0 },
-#define        HELPSW        14
-    { "help", 0 },
-    { NULL, 0 }
-};
+#define SLOCAL_SWITCHES \
+    X("addr address", 0, ADDRSW) \
+    X("user name", 0, USERSW) \
+    X("file file", 0, FILESW) \
+    X("sender address", 0, SENDERSW) \
+    X("mailbox file", 0, MAILBOXSW) \
+    X("home directory", -4, HOMESW) \
+    X("info data", 0, INFOSW) \
+    X("maildelivery file", 0, MAILSW) \
+    X("verbose", 0, VERBSW) \
+    X("noverbose", 0, NVERBSW) \
+    X("suppressdup", 0, SUPPRESSDUP) \
+    X("nosuppressdup", 0, NSUPPRESSDUP) \
+    X("debug", 0, DEBUGSW) \
+    X("version", 0, VERSIONSW) \
+    X("help", 0, HELPSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(SLOCAL);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(SLOCAL, switches);
+#undef X
 
 static int globbed = 0;                /* have we built "vars" table yet?        */
 static int parsed = 0;         /* have we built header field table yet   */
@@ -716,7 +707,7 @@ parse (int fd)
     char name[NAMESZ], field[BUFSIZ];
     struct pair *p, *q;
     FILE  *in;
-    m_getfld_state_t gstate;
+    m_getfld_state_t gstate = 0;
 
     if (parsed++)
        return 0;
@@ -740,16 +731,15 @@ parse (int fd)
      * Scan the headers of the message and build
      * a lookup table.
      */
-    m_getfld_state_init (&gstate);
     for (i = 0;;) {
        int fieldsz = sizeof field;
-       switch (state = m_getfld (gstate, name, field, &fieldsz, in)) {
+       switch (state = m_getfld (&gstate, name, field, &fieldsz, in)) {
            case FLD: 
            case FLDPLUS: 
                lp = add (field, NULL);
                while (state == FLDPLUS) {
                    fieldsz = sizeof field;
-                   state = m_getfld (gstate, name, field, &fieldsz, in);
+                   state = m_getfld (&gstate, name, field, &fieldsz, in);
                    lp = add (field, lp);
                }
                for (p = hdrs; p->p_name; p++) {
@@ -1415,7 +1405,7 @@ suppress_duplicates (int fd, char *file)
     datum key, value;
     DBM *db;
     FILE *in;
-    m_getfld_state_t gstate;
+    m_getfld_state_t gstate = 0;
 
     if ((fd1 = dup (fd)) == -1)
        return -1;
@@ -1425,10 +1415,9 @@ suppress_duplicates (int fd, char *file)
     }
     rewind (in);
 
-    m_getfld_state_init (&gstate);
     for (;;) {
        int bufsz = sizeof buf;
-       state = m_getfld (gstate, name, buf, &bufsz, in);
+       state = m_getfld (&gstate, name, buf, &bufsz, in);
        switch (state) {
            case FLD:
            case FLDPLUS:
@@ -1436,7 +1425,7 @@ suppress_duplicates (int fd, char *file)
                if (mh_strcasecmp (name, "Message-ID")) {
                    while (state == FLDPLUS) {
                        bufsz = sizeof buf;
-                       state = m_getfld (gstate, name, buf, &bufsz, in);
+                       state = m_getfld (&gstate, name, buf, &bufsz, in);
                    }
                    continue;
                }
@@ -1444,7 +1433,7 @@ suppress_duplicates (int fd, char *file)
                cp = add (buf, NULL);
                while (state == FLDPLUS) {
                    bufsz = sizeof buf;
-                   state = m_getfld (gstate, name, buf, &bufsz, in);
+                   state = m_getfld (&gstate, name, buf, &bufsz, in);
                    cp = add (buf, cp);
                }
                key.dptr = trimcpy (cp);