*/
#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"
}
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;
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(fdoutput) < 0) {
- die("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:
- die("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:
- die("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) {
- die("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);
}