]> diplodocus.org Git - nmh/blobdiff - uip/rcvtty.c
Make sure to mark the sequence file as closed in the msgs struct.
[nmh] / uip / rcvtty.c
index 8e659ffe0c05854af36a8633914c04e8c01e4954..5443748c99b56674318ad67f5814e3d1630fc181 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <h/mh.h>
 #include <h/signals.h>
-#include <h/m_setjmp.h>
+#include <setjmp.h>
 #include <h/rcvmail.h>
 #include <h/scansbr.h>
 #include <h/tws.h>
 #include <signal.h>
 #include <fcntl.h>
 
+#ifdef HAVE_GETUTXENT
 #include <utmpx.h>
+#endif /* HAVE_GETUTXENT */
 
 #define        SCANFMT \
 "%2(hour{dtimenow}):%02(min{dtimenow}): %<(size)%5(size) %>%<{encrypted}E%>\
 %<(mymbox{from})%<{to}To:%14(friendly{to})%>%>%<(zero)%17(friendly{from})%>  \
 %{subject}%<{body}<<%{body}>>%>"
 
-static struct swit switches[] = {
-#define        BIFFSW  0
-    { "biff", 0 },
-#define        FORMSW  1
-    { "form formatfile", 0 },
-#define        FMTSW   2
-    { "format string", 5 },
-#define WIDTHSW 3
-    { "width columns", 0 },
-#define NLSW    4
-    { "newline", 0 },
-#define NNLSW   5
-    { "nonewline", 0 },
-#define BELSW  6
-    { "bell", 0 },
-#define        NBELSW  7
-    { "nobell", 0 },
-#define VERSIONSW 8
-    { "version", 0 },
-#define        HELPSW  9
-    { "help", 0 },
-    { NULL, 0 }
-};
+#define RCVTTY_SWITCHES \
+    X("biff", 0, BIFFSW) \
+    X("form formatfile", 0, FORMSW) \
+    X("format string", 5, FMTSW) \
+    X("width columns", 0, WIDTHSW) \
+    X("newline", 0, NLSW) \
+    X("nonewline", 0, NNLSW) \
+    X("bell", 0, BELSW) \
+    X("nobell", 0, NBELSW) \
+    X("version", 0, VERSIONSW) \
+    X("help", 0, HELPSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(RCVTTY);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(RCVTTY, switches);
+#undef X
 
 static jmp_buf myctx;
 static int bell = 1;
@@ -107,10 +105,10 @@ main (int argc, char **argv)
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [command ...]", invo_name);
                    print_help (buf, switches, 1);
-                   done (1);
+                   done (0);
                case VERSIONSW:
                    print_version(invo_name);
-                   done (1);
+                   done (0);
 
                case BIFFSW:
                    biff = 1;
@@ -156,6 +154,7 @@ main (int argc, char **argv)
 
     user = getusername();
 
+#if HAVE_GETUTXENT
     setutxent();
     while ((utp = getutxent()) != NULL) {
         if (utp->ut_type == USER_PROCESS && utp->ut_user[0] != 0
@@ -166,6 +165,7 @@ main (int argc, char **argv)
         }
     }
     endutxent();
+#endif /* HAVE_GETUTXENT */
 
     exit (RCV_MOK);
     return 0;  /* dead code to satisfy the compiler */
@@ -192,13 +192,13 @@ message_fd (char **vec)
     fd = mkstemp (strncpy (tmpfil, "/tmp/rcvttyXXXXX", sizeof(tmpfil)));
     unlink (tmpfil);
 
-    if ((child_id = m_vfork()) == NOTOK) {
+    if ((child_id = fork()) == NOTOK) {
        /* fork error */
        close (fd);
        return header_fd ();
     } else if (child_id) {
        /* parent process */
-       if (!m_setjmp (myctx)) {
+       if (!setjmp (myctx)) {
            SIGNAL (SIGALRM, alrmser);
            bytes = fstat(fileno (stdin), &st) != NOTOK ? (int) st.st_size : 100;
 
@@ -257,6 +257,7 @@ header_fd (void)
     /* get new format string */
     nfs = new_fs (form, format, SCANFMT);
     scan (stdin, 0, 0, nfs, width, 0, 0, NULL, 0L, 0);
+    scan_finished ();
     if (newline)
         write (fd, "\n\r", 2);
     write (fd, scanl, strlen (scanl));
@@ -284,7 +285,7 @@ alert (char *tty, int md)
     if (stat (ttyspec, &st) == NOTOK || (st.st_mode & mask) == 0)
        return;
 
-    if (!m_setjmp (myctx)) {
+    if (!setjmp (myctx)) {
        SIGNAL (SIGALRM, alrmser);
        alarm (2);
        td = open (ttyspec, O_WRONLY);