X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/eed1bea439a5e3c62958fa1e524d527c4a2fb85d..085bca07c0b505f095a50666a3752e5fcb69bc70:/uip/mhlsbr.c diff --git a/uip/mhlsbr.c b/uip/mhlsbr.c index 1c8ab4e0..ade7e1c2 100644 --- a/uip/mhlsbr.c +++ b/uip/mhlsbr.c @@ -5,13 +5,34 @@ * complete copyright information. */ -#include -#include -#include -#include -#include +#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 +#include "h/utils.h" #include "sbr/m_popen.h" #include #include @@ -260,9 +281,9 @@ static char *addrcomps[] = { 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; @@ -271,7 +292,7 @@ static int volume = 0; static int issue = 0; static int exitstat = 0; -static int mhldebug = 0; +static bool mhldebug; static int filesize = 0; @@ -338,7 +359,8 @@ static void compile_filterargs (void); 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; @@ -352,7 +374,7 @@ mhl (int argc, char **argv) argp = arguments; if ((cp = getenv ("MHLDEBUG")) && *cp) - mhldebug++; + mhldebug = true; while ((cp = *argp++)) { if (*cp == '-') { @@ -405,7 +427,7 @@ mhl (int argc, char **argv) mhladios (NULL, "missing argument to %s", argp[-2]); continue; case NPROGSW: - nomore++; + nomore = true; continue; case FMTPROCSW: @@ -447,10 +469,10 @@ mhl (int argc, char **argv) continue; case FORW2SW: - forwall++; + forwall = true; /* FALLTHRU */ case FORW1SW: - forwflg++; + forwflg = true; clearflg = -1;/* XXX */ continue; @@ -462,7 +484,7 @@ mhl (int argc, char **argv) continue; case NBODYSW: - dobody = 0; + dobody = false; continue; } } @@ -588,7 +610,7 @@ mhl_format (char *file, int length, int width) } parptr = bp; - strncpy (name, parse(), sizeof(name)); + strncpy (name, parse(), sizeof(name) - 1); switch (*parptr) { case '\0': case ',': @@ -703,7 +725,7 @@ evalvar (struct mcomp *c1) 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)) @@ -759,7 +781,7 @@ evalvar (struct mcomp *c1) 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; } @@ -884,9 +906,9 @@ process (char *folder, char *fname, int ofilen, int ofilec) 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) @@ -895,7 +917,7 @@ process (char *folder, char *fname, int ofilen, int ofilec) 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; } @@ -1052,12 +1074,13 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec) } 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; @@ -1267,7 +1290,8 @@ putcomp (struct mcomp *c1, struct mcomp *c2, int flag) { 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; @@ -1282,7 +1306,7 @@ putcomp (struct mcomp *c1, struct mcomp *c2, int flag) * 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; @@ -1325,7 +1349,7 @@ putcomp (struct mcomp *c1, struct mcomp *c2, int flag) 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); @@ -1344,7 +1368,7 @@ putcomp (struct mcomp *c1, struct mcomp *c2, int flag) 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); @@ -1397,7 +1421,7 @@ putcomp (struct mcomp *c1, struct mcomp *c2, int flag) static char * oneline (char *stuff, unsigned long flags) { - int spc; + bool spc; char *cp, *ret; if (onelp == NULL) @@ -1408,7 +1432,7 @@ oneline (char *stuff, unsigned long flags) 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'; @@ -1417,12 +1441,12 @@ oneline (char *stuff, unsigned long flags) } if (!spc) { *cp++ = ' '; - spc++; + spc = true; } } else { *cp++ = *onelp; - spc = 0; + spc = false; } *cp = 0; @@ -1594,7 +1618,8 @@ putch (char ch, unsigned long flags) * 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; @@ -1708,7 +1733,7 @@ compile_filterargs (void) 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; } @@ -1742,11 +1767,11 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, */ 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"); } /* @@ -1769,7 +1794,7 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, 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. */ @@ -1801,7 +1826,7 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, */ _exit(0); case -1: - adios(NULL, "Unable to fork for filter writer process"); + die("Unable to fork for filter writer process"); break; } @@ -1813,10 +1838,10 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, 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 */ @@ -1838,14 +1863,9 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, 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]); @@ -1876,7 +1896,7 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, break; case -1: - adios(NULL, "Unable to fork format program"); + die("Unable to fork format program"); } /* @@ -1894,12 +1914,12 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, 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"); } /* @@ -1908,22 +1928,22 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, */ 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); }