X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/ff2b7b715934b346b6121a2a434db116d3203663..085bca07c0b505f095a50666a3752e5fcb69bc70:/uip/mhlsbr.c diff --git a/uip/mhlsbr.c b/uip/mhlsbr.c index c4f452ba..ade7e1c2 100644 --- a/uip/mhlsbr.c +++ b/uip/mhlsbr.c @@ -6,6 +6,26 @@ */ #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" @@ -590,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 ',': @@ -705,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)) @@ -761,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; } @@ -886,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) @@ -897,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; } @@ -1054,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; @@ -1712,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; } @@ -1750,7 +1771,7 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, } if (pipe(fdoutput) < 0) { - die("Unable to create output pipe"); + die("Unable to create output pipe"); } /* @@ -1773,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. */ @@ -1805,7 +1826,7 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, */ _exit(0); case -1: - die("Unable to fork for filter writer process"); + die("Unable to fork for filter writer process"); break; } @@ -1817,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 */ @@ -1842,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]); @@ -1880,7 +1896,7 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, break; case -1: - die("Unable to fork format program"); + die("Unable to fork format program"); } /* @@ -1898,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) { - die("reading from formatproc"); + die("reading from formatproc"); } /* @@ -1912,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); }