]> diplodocus.org Git - nmh/blobdiff - uip/whom.c
Alter HasSuffixC()'s char * to be const.
[nmh] / uip / whom.c
index d405ebb7c9056db90047338424be4fea115e16d9..411c4770e13dde7f6a49ca99be42adb16c98f2e4 100644 (file)
@@ -8,8 +8,8 @@
  */
 
 #include <h/mh.h>
  */
 
 #include <h/mh.h>
+#include <h/utils.h>
 #include <h/signals.h>
 #include <h/signals.h>
-#include <signal.h>
 
 #ifndef CYRUS_SASL
 # define SASLminc(a) (a)
 
 #ifndef CYRUS_SASL
 # define SASLminc(a) (a)
 # define TLSminc(a)   0
 #endif /* TLS_SUPPORT */
 
 # define TLSminc(a)   0
 #endif /* TLS_SUPPORT */
 
-static struct swit switches[] = {
-#define        ALIASW              0
-    { "alias aliasfile", 0 },
-#define        CHKSW               1
-    { "check", 0 },
-#define        NOCHKSW             2
-    { "nocheck", 0 },
-#define        DRAFTSW             3
-    { "draft", 0 },
-#define        DFOLDSW             4
-    { "draftfolder +folder", 6 },
-#define        DMSGSW              5
-    { "draftmessage msg", 6 },
-#define        NDFLDSW             6
-    { "nodraftfolder", 0 },
-#define VERSIONSW           7
-    { "version", 0 },
-#define        HELPSW              8
-    { "help", 0 },
-#define        CLIESW              9
-    { "client host", -6 },
-#define        SERVSW             10
-    { "server host", -6 },
-#define        SNOOPSW            11
-    { "snoop", -5 },
-#define SASLSW             12
-    { "sasl", SASLminc(4) },
-#define SASLMECHSW         13
-    { "saslmech mechanism", SASLminc(-5) },
-#define USERSW             14
-    { "user username", SASLminc(-4) },
-#define PORTSW            15
-    { "port server port name/number", 4 },
-#define TLSSW             16
-    { "tls", TLSminc(-3) },
-    { NULL, 0 }
-};
+#define WHOM_SWITCHES \
+    X("alias aliasfile", 0, ALIASW) \
+    X("check", 0, CHKSW) \
+    X("nocheck", 0, NOCHKSW) \
+    X("draft", 0, DRAFTSW) \
+    X("draftfolder +folder", 6, DFOLDSW) \
+    X("draftmessage msg", 6, DMSGSW) \
+    X("nodraftfolder", 0, NDFLDSW) \
+    X("version", 0, VERSIONSW) \
+    X("help", 0, HELPSW) \
+    X("client host", -6, CLIESW) \
+    X("server host", 0, SERVSW) \
+    X("snoop", 0, SNOOPSW) \
+    X("sasl", SASLminc(4), SASLSW) \
+    X("saslmech mechanism", SASLminc(-5), SASLMECHSW) \
+    X("user username", SASLminc(-4), USERSW) \
+    X("port server port name/number", 4, PORTSW) \
+    X("tls", TLSminc(-3), TLSSW) \
+    X("initialtls", TLSminc(-10), INITTLSSW) \
+    X("notls", TLSminc(-5), NTLSSW) \
+    X("mts smtp|sendmail/smtp|sendmail/pipe", 0, MTSSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(WHOM);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(WHOM, switches);
+#undef X
 
 
 int
 main (int argc, char **argv)
 {
 
 
 int
 main (int argc, char **argv)
 {
-    pid_t child_id;
+    pid_t child_id = OK;
     int i, status, isdf = 0;
     int distsw = 0, vecp = 0;
     char *cp, *dfolder = NULL, *dmsg = NULL;
     char *msg = NULL, **ap, **argp, backup[BUFSIZ];
     char buf[BUFSIZ], **arguments, *vec[MAXARGS];
 
     int i, status, isdf = 0;
     int distsw = 0, vecp = 0;
     char *cp, *dfolder = NULL, *dmsg = NULL;
     char *msg = NULL, **ap, **argp, backup[BUFSIZ];
     char buf[BUFSIZ], **arguments, *vec[MAXARGS];
 
-#ifdef LOCALE
-    setlocale(LC_ALL, "");
-#endif
-    invo_name = r1bindex (argv[0], '/');
-
-    /* read user profile/context */
-    context_read();
+    if (nmh_init(argv[0], 2)) { return 1; }
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
@@ -103,15 +89,18 @@ main (int argc, char **argv)
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [switches] [file]", invo_name);
                    print_help (buf, switches, 1);
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [switches] [file]", invo_name);
                    print_help (buf, switches, 1);
-                   done (1);
+                   done (0);
                case VERSIONSW:
                    print_version(invo_name);
                case VERSIONSW:
                    print_version(invo_name);
-                   done (1);
+                   done (0);
 
                case CHKSW: 
                case NOCHKSW: 
                case SNOOPSW:
                case SASLSW:
 
                case CHKSW: 
                case NOCHKSW: 
                case SNOOPSW:
                case SASLSW:
+               case TLSSW:
+               case INITTLSSW:
+               case NTLSSW:
                    vec[vecp++] = --cp;
                    continue;
 
                    vec[vecp++] = --cp;
                    continue;
 
@@ -144,6 +133,7 @@ main (int argc, char **argv)
                case USERSW:
                case PORTSW:
                case SASLMECHSW:
                case USERSW:
                case PORTSW:
                case SASLMECHSW:
+               case MTSSW:
                    vec[vecp++] = --cp;
                    if (!(cp = *argp++) || *cp == '-')
                        adios (NULL, "missing argument to %s", argp[-2]);
                    vec[vecp++] = --cp;
                    if (!(cp = *argp++) || *cp == '-')
                        adios (NULL, "missing argument to %s", argp[-2]);
@@ -161,16 +151,13 @@ main (int argc, char **argv)
     if ((cp = context_find ("Aliasfile"))) {
        char *dp = NULL;
 
     if ((cp = context_find ("Aliasfile"))) {
        char *dp = NULL;
 
-       for (ap = brkstring(dp = getcpy(cp), " ", "\n"); ap && *ap; ap++) {
+       for (ap = brkstring(dp = mh_xstrdup(cp), " ", "\n"); ap && *ap; ap++) {
            vec[vecp++] = "-alias";
            vec[vecp++] = *ap;
        }
     }
 
     if (msg == NULL) {
            vec[vecp++] = "-alias";
            vec[vecp++] = *ap;
        }
     }
 
     if (msg == NULL) {
-#ifdef WHATNOW
-       if (dfolder || (cp = getenv ("mhdraft")) == NULL || *cp == '\0')
-#endif /* WHATNOW */
            cp  = getcpy (m_draft (dfolder, dmsg, 1, &isdf));
        msg = vec[vecp++] = cp;
     }
            cp  = getcpy (m_draft (dfolder, dmsg, 1, &isdf));
        msg = vec[vecp++] = cp;
     }
@@ -210,7 +197,7 @@ main (int argc, char **argv)
 
            status = pidwait(child_id, OK);
 
 
            status = pidwait(child_id, OK);
 
-           unlink (msg);
+           (void) m_unlink (msg);
            if (rename (backup, msg) == NOTOK)
                adios (msg, "unable to rename %s to", backup);
            done (status);
            if (rename (backup, msg) == NOTOK)
                adios (msg, "unable to rename %s to", backup);
            done (status);