-
-/*
- * rcvtty.c -- a rcvmail program (a lot like rcvalert) handling IPC ttys
+/* rcvtty.c -- a rcvmail program (a lot like rcvalert) handling IPC ttys
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* Ruud de Rooij <ruud@ruud.org> Sun, 28 May 2000 17:28:55 +0200
*/
-#include <h/mh.h>
-#include <h/signals.h>
+#include "h/mh.h"
+#include "sbr/ambigsw.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/error.h"
+#include "h/signals.h"
#include <setjmp.h>
-#include <h/rcvmail.h>
-#include <h/scansbr.h>
-#include <h/tws.h>
-#include <h/mts.h>
+#include "h/rcvmail.h"
+#include "h/scansbr.h"
+#include "h/fmt_scan.h"
+#include "h/tws.h"
+#include "h/mts.h"
+#include "h/done.h"
+#include "h/utils.h"
+#include "sbr/m_mktemp.h"
#include <fcntl.h>
#ifdef HAVE_GETUTXENT
#undef X
static jmp_buf myctx;
-static int bell = 1;
-static int newline = 1;
-static int biff = 0;
+static bool bell = true;
+static bool newline = true;
+static bool biff;
static int width = -1;
static char *form = NULL;
static char *format = NULL;
-/*
- * external prototypes
- */
-char *getusername(void);
-
/*
* static prototypes
*/
char **argp, **arguments, *vec[MAXARGS];
struct utmpx *utp;
- if (nmh_init(argv[0], 1)) { return 1; }
+ if (nmh_init(argv[0], true, false)) { return 1; }
mts_init ();
arguments = getarguments (invo_name, argc, argv, 1);
done (0);
case BIFFSW:
- biff = 1;
+ biff = true;
continue;
case FORMSW:
if (!(form = *argp++) || *form == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
format = NULL;
continue;
case FMTSW:
if (!(format = *argp++) || *format == '-')
- adios (NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
form = NULL;
continue;
case WIDTHSW:
if (!(cp = *argp++) || *cp == '-')
- adios(NULL, "missing argument to %s", argp[-2]);
+ die("missing argument to %s", argp[-2]);
width = atoi(cp);
continue;
case NLSW:
- newline = 1;
+ newline = true;
continue;
case NNLSW:
- newline = 0;
+ newline = false;
continue;
case BELSW:
- bell = 1;
+ bell = true;
continue;
case NBELSW:
- bell = 0;
+ bell = false;
continue;
}
struct stat st;
if ((tfile = m_mktemp2(NULL, invo_name, &fd, NULL)) == NULL) {
- advise(NULL, "unable to create temporary file in %s", get_temp_dir());
+ inform("unable to create temporary file in %s", get_temp_dir());
return NOTOK;
}
(void) m_unlink(tfile); /* Use fd, no longer need the file name. */
/* fork error */
close (fd);
return header_fd ();
- } else if (child_id) {
+ }
+ if (child_id) {
/* parent process */
if (!setjmp (myctx)) {
SIGNAL (SIGALRM, alrmser);
pidwait(child_id, OK);
alarm (0);
- if (fstat (fd, &st) != NOTOK && st.st_size > (off_t) 0)
+ if (fstat (fd, &st) != NOTOK && st.st_size > 0)
return fd;
} else {
/*
/* child process */
rewind (stdin);
if (dup2 (fd, 1) == NOTOK || dup2 (fd, 2) == NOTOK)
- _exit (-1);
+ _exit(1);
closefds (3);
- setpgid ((pid_t) 0, getpid ()); /* put in own process group */
+ setpgid(0, getpid()); /* put in own process group */
if (execvp (vec[0], vec) == NOTOK) {
- _exit (-1);
+ _exit(1);
}
return NOTOK;
charstring_t scanl = NULL;
if ((tfile = m_mktemp2(NULL, invo_name, &fd, NULL)) == NULL) {
- advise(NULL, "unable to create temporary file in %s", get_temp_dir());
+ inform("unable to create temporary file in %s", get_temp_dir());
return NOTOK;
}
(void) m_unlink(tfile); /* Use fd, no longer need the file name. */
if (stat (ttyspec, &st) == NOTOK || (st.st_mode & mask) == 0)
return;
- if (!setjmp (myctx)) {
- SIGNAL (SIGALRM, alrmser);
- alarm (2);
- td = open (ttyspec, O_WRONLY);
- alarm (0);
- if (td == NOTOK)
- return;
- } else {
+ if (setjmp (myctx)) {
alarm (0);
return;
}
-
- lseek (md, (off_t) 0, SEEK_SET);
+ SIGNAL (SIGALRM, alrmser);
+ alarm (2);
+ td = open (ttyspec, O_WRONLY);
+ alarm (0);
+ if (td == NOTOK)
+ return;
+
+ lseek(md, 0, SEEK_SET);
while ((i = read (md, buffer, sizeof(buffer))) > 0)
if (write (td, buffer, i) != i)