Fix uip/whom.c for C89 compatibility
[mmh] / uip / rcvpack.c
index f0f1bd1..b4e37bd 100644 (file)
 #include <h/dropsbr.h>
 #include <h/rcvmail.h>
 #include <h/tws.h>
-#include <h/mts.h>
+#include <unistd.h>
+#include <locale.h>
+#include <sysexits.h>
 
 static struct swit switches[] = {
 #define VERSIONSW  0
-       { "version", 0 },
+       { "Version", 0 },
 #define HELPSW  1
        { "help", 0 },
        { NULL, 0 }
 };
 
+char *version=VERSION;
 
 int
 main(int argc, char **argv)
@@ -28,9 +31,7 @@ main(int argc, char **argv)
        char *cp, *file = NULL, buf[BUFSIZ];
        char **argp, **arguments;
 
-#ifdef LOCALE
        setlocale(LC_ALL, "");
-#endif
        invo_name = mhbasename(argv[0]);
 
        /* read user profile/context */
@@ -45,47 +46,51 @@ main(int argc, char **argv)
                        switch (smatch(++cp, switches)) {
                        case AMBIGSW:
                                ambigsw(cp, switches);
-                               done(1);
+                               exit(EX_USAGE);
                        case UNKWNSW:
-                               adios(NULL, "-%s unknown", cp);
+                               adios(EX_USAGE, NULL, "-%s unknown", cp);
 
                        case HELPSW:
                                snprintf(buf, sizeof(buf),
                                                "%s [switches] file",
                                                invo_name);
                                print_help(buf, switches, 1);
-                               done(1);
+                               exit(argc == 2 ? EX_OK : EX_USAGE);
                        case VERSIONSW:
                                print_version(invo_name);
-                               done(1);
+                               exit(argc == 2 ? EX_OK : EX_USAGE);
                        }
                }
                if (file)
-                       adios(NULL, "only one file at a time!");
+                       adios(EX_USAGE, NULL, "only one file at a time!");
                else
                        file = cp;
        }
 
-       if (!file)
-               adios(NULL, "%s [switches] file", invo_name);
-
-       rewind(stdin);
+       /* copy stdin to stdout, converting rfc822 message to mbox */
+       if (!file) {
+               if (mbox_copy(fileno(stdout), fileno(stdin)) == NOTOK) {
+                       exit(RCV_MBX);
+               }
+               exit(RCV_MOK);
+               return 1;
+       }
 
        /* open and lock the file */
-       if ((md = mbx_open(file, getuid(), getgid(), m_gmprot()))
+       if ((md = mbox_open(file, getuid(), getgid(), m_gmprot()))
                        == NOTOK)
-               done(RCV_MBX);
+               exit(RCV_MBX);
 
        /* append the message */
-       if (mbx_copy(file, md, fileno(stdin), 0) == NOTOK) {
-               mbx_close(file, md);
-               done(RCV_MBX);
+       if (mbox_copy(md, fileno(stdin)) == NOTOK) {
+               mbox_close(file, md);
+               exit(RCV_MBX);
        }
 
        /* close and unlock the file */
-       if (mbx_close(file, md) == NOTOK)
-               done(RCV_MBX);
+       if (mbox_close(file, md) == NOTOK)
+               exit(RCV_MBX);
 
-       done(RCV_MOK);
+       exit(RCV_MOK);
        return 1;
 }