X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d6b2ae5fa68b9a82ffc006c233aef64c5cdb3bd2..441ef14d0e5bc7f203dc93913bd503afdafaef76:/uip/mhlsbr.c diff --git a/uip/mhlsbr.c b/uip/mhlsbr.c index 28d48947..35e918bb 100644 --- a/uip/mhlsbr.c +++ b/uip/mhlsbr.c @@ -545,7 +545,7 @@ static void mhl_format (char *file, int length, int width) { int i; - char *bp, *cp, **ip; + char *bp, **ip; char *ap, name[NAMESZ]; struct mcomp *c1; struct stat st; @@ -591,8 +591,7 @@ mhl_format (char *file, int length, int width) if (*bp == ';') continue; - if ((cp = strchr(bp, '\n'))) - *cp = 0; + TrimSuffixC(bp, '\n'); if (*bp == ':') { (void) add_queue (&fmthd, &fmttl, NULL, bp + 1, CLEARTEXT); @@ -614,7 +613,7 @@ mhl_format (char *file, int length, int width) int n = 0; /* split the fields */ - tmparray = brkstring (getcpy (++parptr), ",", NULL); + tmparray = brkstring (mh_xstrdup(++parptr), ",", NULL); /* count number of fields split */ p = tmparray; @@ -645,14 +644,14 @@ mhl_format (char *file, int length, int width) if (!c1->c_nfs && global.c_nfs) { if (c1->c_flags & DATEFMT) { if (global.c_flags & DATEFMT) { - c1->c_nfs = getcpy (global.c_nfs); + c1->c_nfs = mh_xstrdup(global.c_nfs); compile_formatfield(c1); } } else if (c1->c_flags & ADDRFMT) { if (global.c_flags & ADDRFMT) { - c1->c_nfs = getcpy (global.c_nfs); + c1->c_nfs = mh_xstrdup(global.c_nfs); compile_formatfield(c1); } } @@ -778,7 +777,7 @@ evalvar (struct mcomp *c1) return 1; } - args = (struct arglist *) mh_xcalloc ((size_t) 1, sizeof(struct arglist)); + NEW0(args); if (arglist_tail) arglist_tail->a_next = args; @@ -836,7 +835,7 @@ ptos (char *name, char **s) } c = *parptr; *parptr = 0; - *s = getcpy (cp); + *s = mh_xstrdup(cp); if ((*parptr = c) == '"') parptr++; return 0; @@ -875,14 +874,18 @@ parse (void) static void process (char *folder, char *fname, int ofilen, int ofilec) { - char *cp = NULL; - FILE *fp = NULL; + /* static to prevent "might be clobbered" warning from gcc 4.9.2: */ + static char *cp; + static FILE *fp; struct mcomp *c1; struct stat st; struct arglist *ap; /* volatile to prevent "might be clobbered" warning from gcc: */ char *volatile fname2 = fname ? fname : "(stdin)"; + cp = NULL; + fp = NULL; + switch (setjmp (env)) { case OK: if (fname) { @@ -900,10 +903,11 @@ process (char *folder, char *fname, int ofilen, int ofilec) } else { filesize = 0; } - cp = folder ? concat (folder, ":", fname2, NULL) : getcpy (fname2); + cp = folder ? concat (folder, ":", fname2, NULL) : mh_xstrdup(fname2); if (ontty != PITTY) SIGNAL (SIGINT, intrser); mhlfile (fp, cp, ofilen, ofilec); /* FALL THROUGH! */ + free (cp); for (ap = arglist_head; ap; ap = ap->a_next) { fmt_free(ap->a_fmt, 0); @@ -913,12 +917,11 @@ process (char *folder, char *fname, int ofilen, int ofilec) if (arglist_head) fmt_free(NULL, 1); - default: + default: if (ontty != PITTY) SIGNAL (SIGINT, SIG_IGN); - if (mhl_action == NULL && fp != stdin) + if (mhl_action == NULL && fp != stdin && fp != NULL) fclose (fp); - free (cp); if (holder.c_text) { free (holder.c_text); holder.c_text = NULL; @@ -986,7 +989,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec) nmh_clear_screen (); } else - printf ("\n"); + putchar('\n'); break; default: @@ -1184,18 +1187,15 @@ mcomp_format (struct mcomp *c1, struct mcomp *c2) (q = &pq)->pq_next = NULL; while ((cp = getname (ap))) { - if ((p = (struct pqpair *) mh_xcalloc ((size_t) 1, sizeof(*p))) == NULL) - adios (NULL, "unable to allocate pqpair memory"); - else { - if ((mp = getm (cp, NULL, 0, error, sizeof(error))) == NULL) { - p->pq_text = getcpy (cp); - p->pq_error = getcpy (error); - } else { - p->pq_text = getcpy (mp->m_text); - mnfree (mp); - } - q = (q->pq_next = p); - } + NEW0(p); + if ((mp = getm (cp, NULL, 0, error, sizeof(error))) == NULL) { + p->pq_text = mh_xstrdup(cp); + p->pq_error = mh_xstrdup(error); + } else { + p->pq_text = getcpy (mp->m_text); + mnfree (mp); + } + q = (q->pq_next = p); } for (p = pq.pq_next; p; p = q) { @@ -1213,7 +1213,7 @@ mcomp_format (struct mcomp *c1, struct mcomp *c2) fmt_scan (c1->c_fmt, scanl, BUFSIZ - 1, dat, NULL); buffer = charstring_buffer_copy (scanl); - if (strlen (buffer) > 0) { + if (*buffer) { if (c2->c_text) c2->c_text = add (",\n", c2->c_text); if (*(cp = buffer + strlen (buffer) - 1) == '\n') @@ -1240,22 +1240,19 @@ add_queue (struct mcomp **head, struct mcomp **tail, char *name, char *text, int { struct mcomp *c1; - if ((c1 = (struct mcomp *) mh_xcalloc ((size_t) 1, sizeof(*c1))) == NULL) - adios (NULL, "unable to allocate comp memory"); - else { - c1->c_flags = flags & ~INIT; - if ((c1->c_name = name ? getcpy (name) : NULL)) - c1->c_flags |= mcomp_flags (c1->c_name); - c1->c_text = text ? getcpy (text) : NULL; - if (flags & INIT) { - if (global.c_ovtxt) - c1->c_ovtxt = getcpy (global.c_ovtxt); - c1->c_offset = global.c_offset; - c1->c_ovoff = global. c_ovoff; - c1->c_width = c1->c_length = 0; - c1->c_cwidth = global.c_cwidth; - c1->c_flags |= global.c_flags & GFLAGS; - } + NEW0(c1); + c1->c_flags = flags & ~INIT; + if ((c1->c_name = name ? mh_xstrdup(name) : NULL)) + c1->c_flags |= mcomp_flags (c1->c_name); + c1->c_text = text ? mh_xstrdup(text) : NULL; + if (flags & INIT) { + if (global.c_ovtxt) + c1->c_ovtxt = mh_xstrdup(global.c_ovtxt); + c1->c_offset = global.c_offset; + c1->c_ovoff = global. c_ovoff; + c1->c_width = c1->c_length = 0; + c1->c_cwidth = global.c_cwidth; + c1->c_flags |= global.c_flags & GFLAGS; } if (*head == NULL) *head = c1;