X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhl.c;h=e4e8dbf31dd10fd9dd4e7f348b218ab9f72f9b0d;hp=386cf95cd9fed4b36d0132e1fbfe981b678bdcc2;hb=a8984c0e490cda653615bc0e1d4743ad8fe7a2a7;hpb=2abb9a7cfb0930e27062088734d306e7d78e4cc2 diff --git a/uip/mhl.c b/uip/mhl.c index 386cf95..e4e8dbf 100644 --- a/uip/mhl.c +++ b/uip/mhl.c @@ -16,6 +16,7 @@ #include #include #include +#include /* ** MAJOR BUG: @@ -233,30 +234,30 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - exit(1); + exit(EX_USAGE); case UNKWNSW: - adios(NULL, "-%s unknown\n", cp); + adios(EX_USAGE, NULL, "-%s unknown\n", cp); case HELPSW: snprintf(buf, sizeof(buf), "%s [switches] [files ...]", invo_name); print_help(buf, switches, 1); - exit(0); + exit(argc == 2 ? EX_OK : EX_USAGE); case VERSIONSW: print_version(invo_name); - exit(0); + exit(argc == 2 ? EX_OK : EX_USAGE); case FORMSW: if (!(form = *argp++) || *form == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); continue; case WIDTHSW: if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", + adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); if ((width = atoi(cp)) < 1) - adios(NULL, "bad argument %s %s", + adios(EX_USAGE, NULL, "bad argument %s %s", argp[-2], cp); continue; @@ -290,7 +291,7 @@ main(int argc, char **argv) fflush(stdout); if (ferror(stdout)) { - adios("output", "error writing"); + adios(EX_IOERR, "output", "error writing"); } return exitstat; @@ -321,7 +322,7 @@ mhl_format(char *file, int width) } if ((fp = fopen(etcpath(file), "r")) == NULL) - adios(file, "unable to open format file"); + adios(EX_IOERR, file, "unable to open format file"); if (fstat(fileno(fp), &st) != NOTOK) { mtime = st.st_mtime; @@ -368,7 +369,7 @@ mhl_format(char *file, int width) int n = 0; /* split the fields */ - tmparray = brkstring(getcpy(++parptr), ",", + tmparray = brkstring(mh_xstrdup(++parptr), ",", NULL); /* ** copy pointers to split fields @@ -383,7 +384,7 @@ mhl_format(char *file, int width) parptr = bp; while (*parptr) { if (evalvar(&global)) - adios(NULL, "format file syntax error: %s", bp); + adios(EX_CONFIG, NULL, "format file syntax error: %s", bp); if (*parptr) parptr++; } @@ -394,21 +395,21 @@ mhl_format(char *file, int width) while (*parptr == ':' || *parptr == ',') { parptr++; if (evalvar(c1)) - adios(NULL, "format file syntax error: %s", bp); + adios(EX_CONFIG, NULL, "format file syntax error: %s", bp); } if (!c1->c_fstr && global.c_fstr) { if ((c1->c_flags & DATEFMT) && (global.c_flags & DATEFMT)) { - c1->c_fstr = getcpy(global.c_fstr); + c1->c_fstr = mh_xstrdup(global.c_fstr); } else if ((c1->c_flags & ADDRFMT) && (global.c_flags & ADDRFMT)) { - c1->c_fstr = getcpy(global.c_fstr); + c1->c_fstr = mh_xstrdup(global.c_fstr); } } continue; default: - adios(NULL, "format file syntax error: %s", bp); + adios(EX_CONFIG, NULL, "format file syntax error: %s", bp); } } fclose(fp); @@ -457,8 +458,8 @@ evalvar(struct mcomp *c1) return 1; cp = concat("=", cp, NULL); fmtstr = new_fs(cp, NULL); - free(cp); - c1->c_fstr = getcpy(fmtstr); + mh_free0(&cp); + c1->c_fstr = mh_xstrdup(fmtstr); c1->c_flags |= FORMAT; return 0; } @@ -467,7 +468,7 @@ evalvar(struct mcomp *c1) char *fmtstr; fmtstr = new_fs("=%(decode{text})", NULL); - c1->c_fstr = getcpy(fmtstr); + c1->c_fstr = mh_xstrdup(fmtstr); c1->c_flags |= FORMAT; return 0; } @@ -529,7 +530,7 @@ ptos(char *name, char **s) } c = *parptr; *parptr = 0; - *s = getcpy(cp); + *s = mh_xstrdup(cp); if ((*parptr = c) == '"') parptr++; return 0; @@ -585,8 +586,7 @@ process(char *fname, int ofilen, int ofilec) if (fp != stdin) fclose(fp); if (holder.c_text) { - free(holder.c_text); - holder.c_text = NULL; + mh_free0(&(holder.c_text)); } free_queue(&msghd, &msgtl); for (c1 = fmthd; c1; c1 = c1->c_next) @@ -662,8 +662,7 @@ mhlfile(FILE *fp, char *mname, int ofilen, int ofilec) holder.c_text = concat("(Message ", mname, ")\n", NULL); putcomp(c1, &holder, ONECOMP); - free(holder.c_text); - holder.c_text = NULL; + mh_free0(&(holder.c_text)); continue; } if (!mh_strcasecmp(c1->c_name, "extras")) { @@ -673,14 +672,13 @@ mhlfile(FILE *fp, char *mname, int ofilen, int ofilec) continue; } if (dobody && !mh_strcasecmp(c1->c_name, "body")) { - holder.c_text = mh_xmalloc(sizeof(buf)); + holder.c_text = mh_xcalloc(sizeof(buf), sizeof(char)); strncpy(holder.c_text, buf, sizeof(buf)); while (state == BODY) { putcomp(c1, &holder, BODYCOMP); state = m_getfld(state, name, holder.c_text, sizeof(buf), fp); } - free(holder.c_text); - holder.c_text = NULL; + mh_free0(&(holder.c_text)); continue; } for (c2 = msghd; c2; c2 = c2->c_next) @@ -700,7 +698,7 @@ mhlfile(FILE *fp, char *mname, int ofilen, int ofilec) return; default: - adios(NULL, "getfld() returned %d", state); + adios(EX_SOFTWARE, NULL, "getfld() returned %d", state); } } } @@ -771,23 +769,21 @@ mcomp_format(struct mcomp *c1, struct mcomp *c2) fmt_scan(c1->c_fmt, buffer, sizeof(buffer) - 1, dat); /* Don't need to append a newline, dctime() already did */ - c2->c_text = getcpy(buffer); + c2->c_text = mh_xstrdup(buffer); - free(ap); + mh_free0(&ap); return; } (q = &pq)->pq_next = NULL; while ((cp = getname(ap))) { - if ((p = (struct pqpair *) - calloc((size_t) 1, sizeof(*p))) == NULL) - adios(NULL, "unable to allocate pqpair memory"); + p = mh_xcalloc(1, sizeof(*p)); if ((mp = getm(cp, NULL, 0, AD_NAME, error)) == NULL) { - p->pq_text = getcpy(cp); - p->pq_error = getcpy(error); + p->pq_text = mh_xstrdup(cp); + p->pq_error = mh_xstrdup(error); } else { - p->pq_text = getcpy(mp->m_text); + p->pq_text = mh_xstrdup(mp->m_text); mnfree(mp); } q = (q->pq_next = p); @@ -810,11 +806,11 @@ mcomp_format(struct mcomp *c1, struct mcomp *c2) c2->c_text = add(buffer, c2->c_text); } - free(p->pq_text); + mh_free0(&(p->pq_text)); if (p->pq_error) - free(p->pq_error); + mh_free0(&(p->pq_error)); q = p->pq_next; - free((char *) p); + mh_free0(&p); } c2->c_text = add("\n", c2->c_text); @@ -828,16 +824,15 @@ add_queue(struct mcomp **head, struct mcomp **tail, char *name, { struct mcomp *c1; - if ((c1 = (struct mcomp *) calloc((size_t) 1, sizeof(*c1))) == NULL) - adios(NULL, "unable to allocate comp memory"); + c1 = mh_xcalloc(1, sizeof(*c1)); c1->c_flags = flags & ~INIT; - if ((c1->c_name = name ? getcpy(name) : NULL)) + if ((c1->c_name = name ? mh_xstrdup(name) : NULL)) c1->c_flags |= mcomp_flags(c1->c_name); - c1->c_text = text ? getcpy(text) : NULL; + c1->c_text = text ? mh_xstrdup(text) : NULL; if (flags & INIT) { if (global.c_ovtxt) - c1->c_ovtxt = getcpy(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 = 0; @@ -862,16 +857,16 @@ free_queue(struct mcomp **head, struct mcomp **tail) for (c1 = *head; c1; c1 = c2) { c2 = c1->c_next; if (c1->c_name) - free(c1->c_name); + mh_free0(&(c1->c_name)); if (c1->c_text) - free(c1->c_text); + mh_free0(&(c1->c_text)); if (c1->c_ovtxt) - free(c1->c_ovtxt); + mh_free0(&(c1->c_ovtxt)); if (c1->c_fstr) - free(c1->c_fstr); + mh_free0(&(c1->c_fstr)); if (c1->c_fmt) - free((char *) c1->c_fmt); - free((char *) c1); + mh_free0(&(c1->c_fmt)); + mh_free0(&c1); } *head = *tail = NULL; @@ -892,7 +887,7 @@ putcomp(struct mcomp *c1, struct mcomp *c2, int flag) if ((ovtxt = c1->c_ovtxt ? c1->c_ovtxt : global.c_ovtxt) == NULL) ovtxt = ""; if (wid < ovoff + strlen(ovtxt) + 5) - adios(NULL, "component: %s width(%d) too small for overflow(%d)", c1->c_name, wid, ovoff + strlen(ovtxt) + 5); + adios(EX_SOFTWARE, NULL, "component: %s width(%d) too small for overflow(%d)", c1->c_name, wid, ovoff + strlen(ovtxt) + 5); onelp = NULL; if (c1->c_flags & CLEARTEXT) {