* complete copyright information.
*/
-#include <h/mh.h>
-#include <h/signals.h>
-#include <h/addrsbr.h>
-#include <h/fmt_scan.h>
-#include <h/tws.h>
+#include "h/mh.h"
+#include "sbr/fmt_new.h"
+#include "mhlsbr.h"
+#include "sbr/m_getfld.h"
+#include "sbr/getarguments.h"
+#include "sbr/concat.h"
+#include "sbr/smatch.h"
+#include "sbr/r1bindex.h"
+#include "sbr/snprintb.h"
+#include "sbr/copyip.h"
+#include "sbr/discard.h"
+#include "sbr/trimcpy.h"
+#include "sbr/vfgets.h"
+#include "sbr/check_charset.h"
+#include "sbr/getcpy.h"
+#include "sbr/brkstring.h"
+#include "sbr/ambigsw.h"
+#include "sbr/pidstatus.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/arglist.h"
+#include "sbr/error.h"
+#include "h/signals.h"
+#include "h/addrsbr.h"
+#include "h/fmt_scan.h"
+#include "h/tws.h"
#include "h/done.h"
-#include <h/utils.h>
+#include "h/utils.h"
#include "sbr/m_popen.h"
#include <setjmp.h>
#include <sys/types.h>
static int bellflg = 0;
static int clearflg = 0;
static int dashstuff = 0;
-static int dobody = 1;
-static int forwflg = 0;
-static int forwall = 0;
+static bool dobody = true;
+static bool forwflg;
+static bool forwall;
static int sleepsw = NOTOK;
static int issue = 0;
static int exitstat = 0;
-static int mhldebug = 0;
+static bool mhldebug;
static int filesize = 0;
int
mhl (int argc, char **argv)
{
- int length = 0, nomore = 0;
+ int length = 0;
+ bool nomore = false;
unsigned int i, vecp = 0;
int width = 0;
char *cp, *folder = NULL, *form = NULL;
argp = arguments;
if ((cp = getenv ("MHLDEBUG")) && *cp)
- mhldebug++;
+ mhldebug = true;
while ((cp = *argp++)) {
if (*cp == '-') {
mhladios (NULL, "missing argument to %s", argp[-2]);
continue;
case NPROGSW:
- nomore++;
+ nomore = true;
continue;
case FMTPROCSW:
continue;
case FORW2SW:
- forwall++;
+ forwall = true;
/* FALLTHRU */
case FORW1SW:
- forwflg++;
+ forwflg = true;
clearflg = -1;/* XXX */
continue;
continue;
case NBODYSW:
- dobody = 0;
+ dobody = false;
continue;
}
}
}
parptr = bp;
- strncpy (name, parse(), sizeof(name));
+ strncpy (name, parse(), sizeof(name) - 1);
switch (*parptr) {
case '\0':
case ',':
if (!*parptr)
return 0;
- strncpy (name, parse(), sizeof(name));
+ strncpy (name, parse(), sizeof(name) - 1);
if (!strcasecmp (name, "component")) {
if (ptos (name, &c1->c_text))
if (! c1->c_name || strcasecmp (c1->c_name, "body")) {
inform("format filters are currently only supported on "
- "the \"body\" component");
+ "the \"body\" component");
return 1;
}
fp = stdin;
}
if (fstat(fileno(fp), &st) == 0) {
- filesize = st.st_size;
+ filesize = st.st_size;
} else {
- filesize = 0;
+ filesize = 0;
}
cp = folder ? concat (folder, ":", fname2, NULL) : mh_xstrdup(fname2);
if (ontty != PITTY)
free (cp);
for (ap = arglist_head; ap; ap = ap->a_next) {
- fmt_free(ap->a_fmt, 0);
+ fmt_free(ap->a_fmt, 0);
ap->a_fmt = NULL;
}
}
if (dobody && (!c1->c_name ||
!strcasecmp (c1->c_name, "body"))) {
- if (c1->c_flags & FMTFILTER && state == BODY &&
+ if (c1->c_flags & FMTFILTER && state == BODY &&
formatproc != NULL) {
filterbody(c1, buf, sizeof(buf), state, gstate);
} else {
- holder.c_text = mh_xmalloc (sizeof(buf));
- strncpy (holder.c_text, buf, sizeof(buf));
+ bufsz = sizeof buf;
+ holder.c_text = mh_xmalloc(bufsz);
+ strncpy(holder.c_text, buf, bufsz);
while (state == BODY) {
putcomp (c1, &holder, BODYCOMP);
bufsz = sizeof buf;
{
char *text; /* c1's text, or the name as a fallback. */
char *trimmed_prefix;
- int count, cchdr;
+ int count;
+ bool cchdr;
char *cp;
const int utf8 = strcasecmp(get_charset(), "UTF-8") == 0;
* blank lines. */
trimmed_prefix = rtrim(mh_xstrdup(FENDNULL(text)));
- cchdr = 0;
+ cchdr = false;
lm = 0;
llim = c1->c_length ? c1->c_length : -1;
wid = c1->c_width ? c1->c_width : global.c_width;
if (!(c1->c_flags & SPLIT))
c1->c_flags |= HDROUTPUT;
- cchdr++;
+ cchdr = true;
if ((count = c1->c_cwidth - strlen(text) - 2) > 0)
while (count--)
putstr (" ", c1->c_flags);
if (!(c1->c_flags & SPLIT))
c2->c_flags |= HDROUTPUT;
- cchdr++;
+ cchdr = true;
if ((count = c1->c_cwidth - strlen (c2->c_name) - 2) > 0)
while (count--)
putstr (" ", c1->c_flags);
static char *
oneline (char *stuff, unsigned long flags)
{
- int spc;
+ bool spc;
char *cp, *ret;
if (onelp == NULL)
ret = onelp;
term = 0;
if (flags & COMPRESS) {
- for (spc = 1, cp = ret; *onelp; onelp++)
+ for (spc = true, cp = ret; *onelp; onelp++)
if (isspace ((unsigned char) *onelp)) {
if (*onelp == '\n' && (!onelp[1] || (flags & ADDRFMT))) {
term = '\n';
}
if (!spc) {
*cp++ = ' ';
- spc++;
+ spc = true;
}
}
else {
*cp++ = *onelp;
- spc = 0;
+ spc = false;
}
*cp = 0;
* Either way, the result depends on ASCII LF, either from typing Enter
* or an escaped Ctrl-J, being amongst the read characters.
*/
-static bool linefeed_typed(void)
+static bool
+linefeed_typed(void)
{
char buf[128];
ssize_t n;
fmt_free(NULL, 1);
while (arg) {
- fmt_compile(arg->a_nfs, &arg->a_fmt, 0);
+ fmt_compile(arg->a_nfs, &arg->a_fmt, 0);
arg = arg->a_next;
}
*/
if (pipe(fdinput) < 0) {
- adios(NULL, "Unable to create input pipe");
+ die("Unable to create input pipe");
}
if (pipe(fdoutput) < 0) {
- adios(NULL, "Unable to create output pipe");
+ die("Unable to create output pipe");
}
/*
switch (writerpid = fork()) {
case 0:
- /*
+ /*
* Our child process - just write to the filter input (fdinput[1]).
* Close all other descriptors that we don't need.
*/
*/
_exit(0);
case -1:
- adios(NULL, "Unable to fork for filter writer process");
+ die("Unable to fork for filter writer process");
break;
}
switch (filterpid = fork()) {
char **args, *program;
struct arglist *a;
- int i, dat[5], s, argp;
+ int i, dat[5], argp;
case 0:
- /*
+ /*
* Configure an argument array for us
*/
fmt_scan(a->a_fmt, scanl, BUFSIZ, dat, NULL);
args[i] = charstring_buffer_copy (scanl);
charstring_free (scanl);
- /*
- * fmt_scan likes to put a trailing newline at the end of the
- * format string. If we have one, get rid of it.
- */
- s = strlen(args[i]);
- if (args[i][s - 1] == '\n')
- args[i][s - 1] = '\0';
-
+ /* Trim a trailing linefeed that fmt_scan() likes to put at
+ * the end of the format string. */
+ trim_suffix_c(args[i], '\n');
if (mhldebug)
fprintf(stderr, "filterarg: fmt=\"%s\", output=\"%s\"\n",
a->a_nfs, args[i]);
break;
case -1:
- adios(NULL, "Unable to fork format program");
+ die("Unable to fork format program");
}
/*
holder.c_text = buf;
while ((cc = read(fdoutput[0], buf, bufsz - 1)) > 0) {
- buf[cc] = '\0';
- putcomp(c1, &holder, BODYCOMP);
+ buf[cc] = '\0';
+ putcomp(c1, &holder, BODYCOMP);
}
if (cc < 0) {
- adios(NULL, "reading from formatproc");
+ die("reading from formatproc");
}
/*
*/
if (waitpid(filterpid, &waitstat, 0) < 0) {
- if (errno != ECHILD) {
+ if (errno != ECHILD) {
adios("filterproc", "Unable to determine status");
}
} else {
- if (! (WIFEXITED(waitstat) && WEXITSTATUS(waitstat) == 0)) {
+ if (! (WIFEXITED(waitstat) && WEXITSTATUS(waitstat) == 0)) {
pidstatus(waitstat, stderr, "filterproc");
}
}
if (waitpid(writerpid, &waitstat, 0) < 0) {
- if (errno != ECHILD) {
+ if (errno != ECHILD) {
adios("writer process", "Unable to determine status");
done(1);
}
} else {
- if (! (WIFEXITED(waitstat) && WEXITSTATUS(waitstat) == 0)) {
+ if (! (WIFEXITED(waitstat) && WEXITSTATUS(waitstat) == 0)) {
pidstatus(waitstat, stderr, "writer process");
done(1);
}