X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/b83f328aa3deb6a1ee889e54dcec6981d2ac3498..63621a81d16ab743de6b57d47578a9a2c670ad22:/uip/fmttest.c diff --git a/uip/fmttest.c b/uip/fmttest.c index b39d0d52..78f08561 100644 --- a/uip/fmttest.c +++ b/uip/fmttest.c @@ -1,6 +1,4 @@ - -/* - * fmttest.c -- A program to help test and debug format instructions +/* fmttest.c -- A program to help test and debug format instructions * * This code is Copyright (c) 2012, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -13,6 +11,8 @@ #include #include #include +#include "sbr/m_maildir.h" +#include "sbr/terminal.h" #define FMTTEST_SWITCHES \ X("form formatfile", 0, FORMSW) \ @@ -29,7 +29,6 @@ X("ccme", 0, CCMESW) \ X("noccme", 0, NCCMESW) \ X("outsize size-in-characters", 0, OUTSIZESW) \ - X("bufsize size-in-bytes", 0, BUFSZSW) \ X("width column-width", 0, WIDTHSW) \ X("msgnum number", 0, MSGNUMSW) \ X("msgcur flag", 0, MSGCURSW) \ @@ -83,19 +82,20 @@ static void assignlabel(struct format *); static char *f_typestr(int); static char *c_typestr(int); static char *c_flagsstr(int); -static void litputs(char *); +static void litputs(const char *); static void litputc(char); -static void process_addresses(struct format *, struct msgs_array *, char *, - int, int, int *, struct fmt_callbacks *); -static void process_raw(struct format *, struct msgs_array *, char *, - int, int, int *, struct fmt_callbacks *); +static void process_addresses(struct format *, struct msgs_array *, + charstring_t, int, int *, + struct fmt_callbacks *); +static void process_raw(struct format *, struct msgs_array *, charstring_t, + int, int *, struct fmt_callbacks *); static void process_messages(struct format *, struct msgs_array *, - struct msgs_array *, char *, char *, int, - int, int, int *, struct fmt_callbacks *); + struct msgs_array *, charstring_t, char *, int, + int, int *, struct fmt_callbacks *); static void process_single_file(FILE *, struct msgs_array *, int *, int, - struct format *, char *, int, int, + struct format *, charstring_t, int, struct fmt_callbacks *); -static void test_trace(void *, struct format *, int, char *, char *); +static void test_trace(void *, struct format *, int, char *, const char *); static char *test_formataddr(char *, char *); static char *test_concataddr(char *, char *); static int insert(struct mailname *); @@ -110,24 +110,19 @@ int main (int argc, char **argv) { char *cp, *form = NULL, *format = NULL, *defformat = FORMAT, *folder = NULL; - char buf[BUFSIZ], *nfs, **argp, **arguments, *buffer; + char buf[BUFSIZ], *nfs, **argp, **arguments; + charstring_t buffer; struct format *fmt; struct comp *cptr; struct msgs_array msgs = { 0, 0, NULL }, compargs = { 0, 0, NULL}; int dump = 0, i; - int outputsize = 0, bufsize = 0, dupaddrs = 1, trace = 0, files = 0; + int outputsize = 0, dupaddrs = 1, trace = 0, files = 0; int colwidth = -1, msgnum = -1, msgcur = -1, msgsize = -1, msgunseen = -1; enum mode_t mode = MESSAGE; int dat[5]; struct fmt_callbacks cb, *cbp = NULL; -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = r1bindex (argv[0], '/'); - - /* read user profile/context */ - context_read(); + if (nmh_init(argv[0], 1)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -170,17 +165,12 @@ main (int argc, char **argv) if (!(cp = *argp++) || *cp == '-') adios(NULL, "missing argument to %s", argp[-2]); if (strcmp(cp, "max") == 0) - outputsize = -1; + outputsize = INT_MAX; else if (strcmp(cp, "width") == 0) outputsize = sc_width(); else outputsize = atoi(cp); continue; - case BUFSZSW: - if (!(cp = *argp++) || *cp == '-') - adios(NULL, "missing argument to %s", argp[-2]); - bufsize = atoi(cp); - continue; case FORMSW: if (!(form = *argp++) || *form == '-') @@ -281,8 +271,7 @@ main (int argc, char **argv) if (mode == MESSAGE && !files && (*cp == '+' || *cp == '@')) { if (folder) adios (NULL, "only one folder at a time!"); - else - folder = pluspath (cp); + folder = pluspath (cp); } else app_msgarg(&msgs, cp); } @@ -298,8 +287,7 @@ main (int argc, char **argv) */ if (!dump && compargs.size == 0 && msgs.size == 0) { - adios (NULL, "usage: [switches] [+folder] msgs | strings...", - invo_name); + adios(NULL, "usage: [switches] [+folder] msgs | strings..."); } /* @@ -327,22 +315,13 @@ main (int argc, char **argv) } } - /* - * If we don't specify a buffer size, allocate a default one. - */ - - if (bufsize == 0) - bufsize = BUFSIZ; + buffer = charstring_create(BUFSIZ); - buffer = mh_xmalloc(bufsize); - - if (outputsize < 0) - outputsize = bufsize - 1; /* For the trailing NUL */ - else if (outputsize == 0) { - if (mode == MESSAGE) + if (outputsize == 0) { + if (mode == MESSAGE) outputsize = sc_width(); else - outputsize = bufsize - 1; + outputsize = INT_MAX; } dat[0] = msgnum; @@ -357,7 +336,7 @@ main (int argc, char **argv) */ if (dupaddrs == 0 || trace) { - memset(&cb, 0, sizeof(cb)); + ZERO(&cb); cbp = &cb; if (dupaddrs == 0) { @@ -370,10 +349,10 @@ main (int argc, char **argv) if (trace) { struct trace_context *ctx; - ctx = mh_xmalloc(sizeof(*ctx)); + NEW(ctx); ctx->num = -1; ctx->str = dummy; - ctx->outbuf = getcpy(NULL); + ctx->outbuf = mh_xstrdup(""); cb.trace_func = test_trace; cb.trace_context = ctx; @@ -381,8 +360,8 @@ main (int argc, char **argv) } if (mode == MESSAGE) { - process_messages(fmt, &compargs, &msgs, buffer, folder, bufsize, - outputsize, files, dat, cbp); + process_messages(fmt, &compargs, &msgs, buffer, folder, outputsize, + files, dat, cbp); } else { if (compargs.size) { for (i = 0; i < compargs.size; i += 2) { @@ -393,12 +372,12 @@ main (int argc, char **argv) } if (mode == ADDRESS) { - process_addresses(fmt, &msgs, buffer, bufsize, outputsize, - dat, cbp); + process_addresses(fmt, &msgs, buffer, outputsize, dat, cbp); } else /* Fall-through for RAW or DATE */ - process_raw(fmt, &msgs, buffer, bufsize, outputsize, dat, cbp); + process_raw(fmt, &msgs, buffer, outputsize, dat, cbp); } + charstring_free(buffer); fmt_free(fmt, 1); done(0); @@ -416,8 +395,9 @@ struct pqpair { }; static void -process_addresses(struct format *fmt, struct msgs_array *addrs, char *buffer, - int bufsize, int outwidth, int *dat, struct fmt_callbacks *cb) +process_addresses(struct format *fmt, struct msgs_array *addrs, + charstring_t buffer, int outwidth, int *dat, + struct fmt_callbacks *cb) { int i; char *cp, error[BUFSIZ]; @@ -438,11 +418,10 @@ process_addresses(struct format *fmt, struct msgs_array *addrs, char *buffer, for (i = 0; i < addrs->size; i++) { (q = &pq)->pq_next = NULL; while ((cp = getname(addrs->msgs[i]))) { - if ((p = (struct pqpair *) calloc ((size_t) 1, sizeof(*p))) == NULL) - adios (NULL, "unable to allocate pqpair memory"); + NEW0(p); if ((mp = getm(cp, NULL, 0, error, sizeof(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); mnfree(mp); @@ -453,27 +432,23 @@ process_addresses(struct format *fmt, struct msgs_array *addrs, char *buffer, for (p = pq.pq_next; p; p = q) { c = fmt_findcomp("text"); if (c) { - if (c->c_text) - free(c->c_text); + free(c->c_text); c->c_text = p->pq_text; p->pq_text = NULL; } c = fmt_findcomp("error"); if (c) { - if (c->c_text) - free(c->c_text); + free(c->c_text); c->c_text = p->pq_error; p->pq_error = NULL; } - fmt_scan(fmt, buffer, bufsize, outwidth, dat, cb); - fputs(buffer, stdout); + fmt_scan(fmt, buffer, outwidth, dat, cb); + fputs(charstring_buffer(buffer), stdout); mlistfree(); - if (p->pq_text) - free(p->pq_text); - if (p->pq_error) - free(p->pq_error); + free(p->pq_text); + free(p->pq_error); q = p->pq_next; free(p); } @@ -487,8 +462,8 @@ process_addresses(struct format *fmt, struct msgs_array *addrs, char *buffer, static void process_messages(struct format *fmt, struct msgs_array *comps, - struct msgs_array *msgs, char *buffer, char *folder, - int bufsize, int outwidth, int files, int *dat, + struct msgs_array *msgs, charstring_t buffer, char *folder, + int outwidth, int files, int *dat, struct fmt_callbacks *cb) { int i, msgnum, msgsize = dat[2], num = dat[0], cur = dat[1]; @@ -506,11 +481,11 @@ process_messages(struct format *fmt, struct msgs_array *comps, if (files) { for (i = 0; i < msgs->size; i++) { if ((in = fopen(cp = msgs->msgs[i], "r")) == NULL) { - admonish(cp, "unable to open file"); + admonish(cp, "unable to open file"); continue; } process_single_file(in, comps, dat, msgsize, fmt, buffer, - bufsize, outwidth, cb); + outwidth, cb); } return; @@ -535,7 +510,7 @@ process_messages(struct format *fmt, struct msgs_array *comps, done(1); seq_setprev(mp); /* set the Previous-Sequence */ - context_replace(pfolder, folder); /* update curren folder */ + context_replace(pfolder, folder); /* update current folder */ seq_save(mp); /* synchronize message sequences */ context_save(); /* save the context file */ @@ -548,14 +523,13 @@ process_messages(struct format *fmt, struct msgs_array *comps, if ((cp = context_find(usequence)) && *cp) { char **ap, *dp; - dp = getcpy(cp); + dp = mh_xstrdup(cp); ap = brkstring(dp, " ", "\n"); for (i = 0; ap && *ap; i++, ap++) ivector_push_back (seqnum, seq_getnum(mp, *ap)); num_unseen_seq = i; - if (dp) - free(dp); + free(dp); } } @@ -591,13 +565,12 @@ process_messages(struct format *fmt, struct msgs_array *comps, */ process_single_file(in, comps, dat, msgsize, fmt, buffer, - bufsize, outwidth, cb); + outwidth, cb); } } ivector_free (seqnum); folder_free(mp); - return; } /* @@ -606,12 +579,12 @@ process_messages(struct format *fmt, struct msgs_array *comps, static void process_single_file(FILE *in, struct msgs_array *comps, int *dat, int msgsize, - struct format *fmt, char *buffer, int bufsize, - int outwidth, struct fmt_callbacks *cb) + struct format *fmt, charstring_t buffer, int outwidth, + struct fmt_callbacks *cb) { int i, state; - char name[NAMESZ], rbuf[BUFSIZ]; - m_getfld_state_t gstate = 0; + char name[NAMESZ], rbuf[NMH_BUFSIZ]; + m_getfld_state_t gstate; struct comp *c; int bufsz; @@ -629,7 +602,7 @@ process_single_file(FILE *in, struct msgs_array *comps, int *dat, int msgsize, } /* - * Initialize everyting else + * Initialize everything else */ if (dat[0] == -1) @@ -643,9 +616,10 @@ process_single_file(FILE *in, struct msgs_array *comps, int *dat, int msgsize, * Read in the message and process the components */ - for (state = FLD;;) { + gstate = m_getfld_state_init(in); + for (;;) { bufsz = sizeof(rbuf); - state = m_getfld(&gstate, name, rbuf, &bufsz, in); + state = m_getfld2(&gstate, name, rbuf, &bufsz); switch (state) { case FLD: case FLDPLUS: @@ -653,28 +627,27 @@ process_single_file(FILE *in, struct msgs_array *comps, int *dat, int msgsize, if (i != -1) { while (state == FLDPLUS) { bufsz = sizeof(rbuf); - state = m_getfld(&gstate, name, rbuf, &bufsz, in); + state = m_getfld2(&gstate, name, rbuf, &bufsz); fmt_appendcomp(i, name, rbuf); } } while (state == FLDPLUS) { bufsz = sizeof(rbuf); - state = m_getfld(&gstate, name, rbuf, &bufsz, in); + state = m_getfld2(&gstate, name, rbuf, &bufsz); } break; case BODY: if (fmt_findcomp("body")) { if ((i = strlen(rbuf)) < outwidth) { - bufsz = outwidth - 1; - state = m_getfld(&gstate, name, rbuf + i, - &bufsz, in); + bufsz = min (outwidth, (int) sizeof rbuf - i); + m_getfld2(&gstate, name, rbuf + i, &bufsz); } fmt_addcomptext("body", rbuf); } - /* fall through */ + goto finished; default: goto finished; @@ -691,14 +664,13 @@ finished: for (i = 0; i < comps->size; i += 2) { c = fmt_findcomp(comps->msgs[i]); if (c) { - if (c->c_text) - free(c->c_text); + free(c->c_text); c->c_text = getcpy(comps->msgs[i + 1]); } } } - fmt_scan(fmt, buffer, bufsize, outwidth, dat, cb); - fputs(buffer, stdout); + fmt_scan(fmt, buffer, outwidth, dat, cb); + fputs(charstring_buffer (buffer), stdout); mlistfree(); } @@ -707,8 +679,8 @@ finished: */ static void -process_raw(struct format *fmt, struct msgs_array *text, char *buffer, - int bufsize, int outwidth, int *dat, struct fmt_callbacks *cb) +process_raw(struct format *fmt, struct msgs_array *text, charstring_t buffer, + int outwidth, int *dat, struct fmt_callbacks *cb) { int i; struct comp *c; @@ -726,13 +698,12 @@ process_raw(struct format *fmt, struct msgs_array *text, char *buffer, for (i = 0; i < text->size; i++) { if (c != NULL) { - if (c->c_text != NULL) - free(c->c_text); + free(c->c_text); c->c_text = getcpy(text->msgs[i]); } - fmt_scan(fmt, buffer, bufsize, outwidth, dat, cb); - fputs(buffer, stdout); + fmt_scan(fmt, buffer, outwidth, dat, cb); + fputs(charstring_buffer (buffer), stdout); mlistfree(); } } @@ -745,7 +716,8 @@ process_raw(struct format *fmt, struct msgs_array *text, char *buffer, */ static void -test_trace(void *context, struct format *fmt, int num, char *str, char *outbuf) +test_trace(void *context, struct format *fmt, int num, char *str, + const char *outbuf) { struct trace_context *ctx = (struct trace_context *) context; int changed = 0; @@ -760,21 +732,21 @@ test_trace(void *context, struct format *fmt, int num, char *str, char *outbuf) if (str != ctx->str) { if (changed++) - printf(" "); + putchar(' '); printf("str="); litputs(str); ctx->str = str; } if (changed) - printf("\n"); + putchar('\n'); if (strcmp(outbuf, ctx->outbuf) != 0) { printf("outbuf="); litputs(outbuf); putchar('\n'); free(ctx->outbuf); - ctx->outbuf = getcpy(outbuf); + ctx->outbuf = mh_xstrdup(outbuf); } } @@ -796,7 +768,7 @@ fmt_dump (char *nfs, struct format *fmth) static void dumpone(struct format *fmt) { - register int i; + int i; if ((i = findlabel(fmt)) >= 0) printf("L%d:", i); @@ -864,6 +836,8 @@ dumpone(struct format *fmt) case FT_LS_FRIENDLY: case FT_PARSEADDR: case FT_MYMBOX: + case FT_GETMYMBOX: + case FT_GETMYADDR: printf(", c_name "); litputs(fmt->f_comp->c_name); if (fmt->f_comp->c_type) @@ -891,9 +865,6 @@ dumpone(struct format *fmt) break; case FT_LIT: -#ifdef FT_LIT_FORCE - case FT_LIT_FORCE: -#endif putchar(' '); litputs(fmt->f_text); break; @@ -918,6 +889,7 @@ dumpone(struct format *fmt) case FT_IF_MATCH: case FT_IF_AMATCH: printf(" continue else goto"); + /* FALLTHRU */ case FT_GOTO: i = findlabel(fmt + fmt->f_skip); printf(" L%d", i); @@ -936,6 +908,7 @@ dumpone(struct format *fmt) case FT_LV_LIT: case FT_LV_PLUS_L: case FT_LV_MINUS_L: + case FT_LV_MULTIPLY_L: case FT_LV_DIVIDE_L: case FT_LV_MODULO_L: printf(" value %d", fmt->f_value); @@ -1005,7 +978,7 @@ initlabels(struct format *fmth) static int findlabel(struct format *addr) { - register int i; + int i; for (i = 0; i < lused; ++i) if (addr == lvec[i]) @@ -1031,103 +1004,101 @@ f_typestr(int t) static char buf[32]; switch (t) { - case FT_COMP: return("COMP"); - case FT_COMPF: return("COMPF"); - case FT_LIT: return("LIT"); - case FT_LITF: return("LITF"); -#ifdef FT_LIT_FORCE - case FT_LIT_FORCE: return("LIT_FORCE"); -#endif - case FT_CHAR: return("CHAR"); - case FT_NUM: return("NUM"); - case FT_NUMF: return("NUMF"); - case FT_STR: return("STR"); - case FT_STRF: return("STRF"); - case FT_STRFW: return("STRFW"); - case FT_PUTADDR: return("PUTADDR"); - case FT_STRLIT: return("STRLIT"); - case FT_STRLITZ: return("STRLITZ"); - case FT_LS_COMP: return("LS_COMP"); - case FT_LS_LIT: return("LS_LIT"); - case FT_LS_GETENV: return("LS_GETENV"); - case FT_LS_DECODECOMP: return("LS_DECODECOMP"); - case FT_LS_DECODE: return("LS_DECODE"); - case FT_LS_TRIM: return("LS_TRIM"); - case FT_LV_COMP: return("LV_COMP"); - case FT_LV_COMPFLAG: return("LV_COMPFLAG"); - case FT_LV_LIT: return("LV_LIT"); - case FT_LV_DAT: return("LV_DAT"); - case FT_LV_STRLEN: return("LV_STRLEN"); - case FT_LV_PLUS_L: return("LV_PLUS_L"); - case FT_LV_MINUS_L: return("LV_MINUS_L"); - case FT_LV_DIVIDE_L: return("LV_DIVIDE_L"); - case FT_LV_MODULO_L: return("LV_MODULO_L"); - case FT_LV_CHAR_LEFT: return("LV_CHAR_LEFT"); - case FT_LS_MONTH: return("LS_MONTH"); - case FT_LS_LMONTH: return("LS_LMONTH"); - case FT_LS_ZONE: return("LS_ZONE"); - case FT_LS_DAY: return("LS_DAY"); - case FT_LS_WEEKDAY: return("LS_WEEKDAY"); - case FT_LS_822DATE: return("LS_822DATE"); - case FT_LS_PRETTY: return("LS_PRETTY"); - case FT_LV_SEC: return("LV_SEC"); - case FT_LV_MIN: return("LV_MIN"); - case FT_LV_HOUR: return("LV_HOUR"); - case FT_LV_MDAY: return("LV_MDAY"); - case FT_LV_MON: return("LV_MON"); - case FT_LV_YEAR: return("LV_YEAR"); - case FT_LV_YDAY: return("LV_YDAY"); - case FT_LV_WDAY: return("LV_WDAY"); - case FT_LV_ZONE: return("LV_ZONE"); - case FT_LV_CLOCK: return("LV_CLOCK"); - case FT_LV_RCLOCK: return("LV_RCLOCK"); - case FT_LV_DAYF: return("LV_DAYF"); - case FT_LV_DST: return("LV_DST"); - case FT_LV_ZONEF: return("LV_ZONEF"); - case FT_LS_ADDR: return("LS_ADDR"); - case FT_LS_PERS: return("LS_PERS"); - case FT_LS_MBOX: return("LS_MBOX"); - case FT_LS_HOST: return("LS_HOST"); - case FT_LS_PATH: return("LS_PATH"); - case FT_LS_GNAME: return("LS_GNAME"); - case FT_LS_NOTE: return("LS_NOTE"); - case FT_LS_822ADDR: return("LS_822ADDR"); - case FT_LS_FRIENDLY: return("LS_FRIENDLY"); - case FT_LV_HOSTTYPE: return("LV_HOSTTYPE"); - case FT_LV_INGRPF: return("LV_INGRPF"); - case FT_LS_UNQUOTE: return("LS_UNQUOTE"); - case FT_LV_NOHOSTF: return("LV_NOHOSTF"); - case FT_LOCALDATE: return("LOCALDATE"); - case FT_GMTDATE: return("GMTDATE"); - case FT_PARSEDATE: return("PARSEDATE"); - case FT_PARSEADDR: return("PARSEADDR"); - case FT_FORMATADDR: return("FORMATADDR"); - case FT_CONCATADDR: return("CONCATADDR"); - case FT_MYMBOX: return("MYMBOX"); -#ifdef FT_ADDTOSEQ - case FT_ADDTOSEQ: return("ADDTOSEQ"); -#endif - case FT_SAVESTR: return("SAVESTR"); -#ifdef FT_PAUSE - case FT_PAUSE: return ("PAUSE"); -#endif - case FT_DONE: return("DONE"); - case FT_NOP: return("NOP"); - case FT_GOTO: return("GOTO"); - case FT_IF_S_NULL: return("IF_S_NULL"); - case FT_IF_S: return("IF_S"); - case FT_IF_V_EQ: return("IF_V_EQ"); - case FT_IF_V_NE: return("IF_V_NE"); - case FT_IF_V_GT: return("IF_V_GT"); - case FT_IF_MATCH: return("IF_MATCH"); - case FT_IF_AMATCH: return("IF_AMATCH"); - case FT_S_NULL: return("S_NULL"); - case FT_S_NONNULL: return("S_NONNULL"); - case FT_V_EQ: return("V_EQ"); - case FT_V_NE: return("V_NE"); - case FT_V_GT: return("V_GT"); - case FT_V_MATCH: return("V_MATCH"); - case FT_V_AMATCH: return("V_AMATCH"); + case FT_COMP: return "COMP"; + case FT_COMPF: return "COMPF"; + case FT_LIT: return "LIT"; + case FT_LITF: return "LITF"; + case FT_CHAR: return "CHAR"; + case FT_NUM: return "NUM"; + case FT_NUMF: return "NUMF"; + case FT_STR: return "STR"; + case FT_STRF: return "STRF"; + case FT_STRFW: return "STRFW"; + case FT_STRLIT: return "STRLIT"; + case FT_STRLITZ: return "STRLITZ"; + case FT_PUTADDR: return "PUTADDR"; + case FT_LS_COMP: return "LS_COMP"; + case FT_LS_LIT: return "LS_LIT"; + case FT_LS_GETENV: return "LS_GETENV"; + case FT_LS_CFIND: return "LS_CFIND"; + case FT_LS_DECODECOMP: return "LS_DECODECOMP"; + case FT_LS_DECODE: return "LS_DECODE"; + case FT_LS_TRIM: return "LS_TRIM"; + case FT_LV_COMP: return "LV_COMP"; + case FT_LV_COMPFLAG: return "LV_COMPFLAG"; + case FT_LV_LIT: return "LV_LIT"; + case FT_LV_DAT: return "LV_DAT"; + case FT_LV_STRLEN: return "LV_STRLEN"; + case FT_LV_PLUS_L: return "LV_PLUS_L"; + case FT_LV_MINUS_L: return "LV_MINUS_L"; + case FT_LV_MULTIPLY_L: return "LV_MULTIPLY_L"; + case FT_LV_DIVIDE_L: return "LV_DIVIDE_L"; + case FT_LV_MODULO_L: return "LV_MODULO_L"; + case FT_LV_CHAR_LEFT: return "LV_CHAR_LEFT"; + case FT_LS_MONTH: return "LS_MONTH"; + case FT_LS_LMONTH: return "LS_LMONTH"; + case FT_LS_ZONE: return "LS_ZONE"; + case FT_LS_DAY: return "LS_DAY"; + case FT_LS_WEEKDAY: return "LS_WEEKDAY"; + case FT_LS_822DATE: return "LS_822DATE"; + case FT_LS_PRETTY: return "LS_PRETTY"; + case FT_LS_KILO: return "LS_KILO"; + case FT_LS_KIBI: return "LS_KIBI"; + case FT_LV_SEC: return "LV_SEC"; + case FT_LV_MIN: return "LV_MIN"; + case FT_LV_HOUR: return "LV_HOUR"; + case FT_LV_MDAY: return "LV_MDAY"; + case FT_LV_MON: return "LV_MON"; + case FT_LV_YEAR: return "LV_YEAR"; + case FT_LV_YDAY: return "LV_YDAY"; + case FT_LV_WDAY: return "LV_WDAY"; + case FT_LV_ZONE: return "LV_ZONE"; + case FT_LV_CLOCK: return "LV_CLOCK"; + case FT_LV_RCLOCK: return "LV_RCLOCK"; + case FT_LV_DAYF: return "LV_DAYF"; + case FT_LV_DST: return "LV_DST"; + case FT_LV_ZONEF: return "LV_ZONEF"; + case FT_LS_PERS: return "LS_PERS"; + case FT_LS_MBOX: return "LS_MBOX"; + case FT_LS_HOST: return "LS_HOST"; + case FT_LS_PATH: return "LS_PATH"; + case FT_LS_GNAME: return "LS_GNAME"; + case FT_LS_NOTE: return "LS_NOTE"; + case FT_LS_ADDR: return "LS_ADDR"; + case FT_LS_822ADDR: return "LS_822ADDR"; + case FT_LS_FRIENDLY: return "LS_FRIENDLY"; + case FT_LV_HOSTTYPE: return "LV_HOSTTYPE"; + case FT_LV_INGRPF: return "LV_INGRPF"; + case FT_LS_UNQUOTE: return "LS_UNQUOTE"; + case FT_LV_NOHOSTF: return "LV_NOHOSTF"; + case FT_LOCALDATE: return "LOCALDATE"; + case FT_GMTDATE: return "GMTDATE"; + case FT_PARSEDATE: return "PARSEDATE"; + case FT_PARSEADDR: return "PARSEADDR"; + case FT_FORMATADDR: return "FORMATADDR"; + case FT_CONCATADDR: return "CONCATADDR"; + case FT_MYMBOX: return "MYMBOX"; + case FT_GETMYMBOX: return "GETMYMBOX"; + case FT_GETMYADDR: return "GETMYADDR"; + case FT_SAVESTR: return "SAVESTR"; + case FT_DONE: return "DONE"; + case FT_PAUSE: return "PAUSE"; + case FT_NOP: return "NOP"; + case FT_GOTO: return "GOTO"; + case FT_IF_S_NULL: return "IF_S_NULL"; + case FT_IF_S: return "IF_S"; + case FT_IF_V_EQ: return "IF_V_EQ"; + case FT_IF_V_NE: return "IF_V_NE"; + case FT_IF_V_GT: return "IF_V_GT"; + case FT_IF_MATCH: return "IF_MATCH"; + case FT_IF_AMATCH: return "IF_AMATCH"; + case FT_S_NULL: return "S_NULL"; + case FT_S_NONNULL: return "S_NONNULL"; + case FT_V_EQ: return "V_EQ"; + case FT_V_NE: return "V_NE"; + case FT_V_GT: return "V_GT"; + case FT_V_MATCH: return "V_MATCH"; + case FT_V_AMATCH: return "V_AMATCH"; default: snprintf(buf, sizeof(buf), "/* ??? #%d */", t); return(buf); @@ -1153,13 +1124,13 @@ c_flagsstr(int t) } static void -litputs(char *s) +litputs(const char *s) { if (s) { - putc('"', stdout); + putchar('"'); while (*s) litputc(*s++); - putc('"', stdout); + putchar('"'); } else fputs("", stdout); } @@ -1171,26 +1142,26 @@ litputc(char c) printf("\\x%02x", (unsigned char) c); } else if (c < 0x20 || c == 0177) { if (c == '\b') { - putc('\\', stdout); - putc('b', stdout); + putchar('\\'); + putchar('b'); } else if (c == '\f') { - putc('\\', stdout); - putc('f', stdout); + putchar('\\'); + putchar('f'); } else if (c == '\n') { - putc('\\', stdout); - putc('n', stdout); + putchar('\\'); + putchar('n'); } else if (c == '\r') { - putc('\\', stdout); - putc('r', stdout); + putchar('\\'); + putchar('r'); } else if (c == '\t') { - putc('\\', stdout); - putc('t', stdout); + putchar('\\'); + putchar('t'); } else { - putc('^', stdout); - putc(c ^ 0x40, stdout); /* DEL to ?, others to alpha */ + putchar('^'); + putchar(c ^ 0x40); /* DEL to ?, others to alpha */ } } else - putc(c, stdout); + putchar(c); } /* @@ -1236,13 +1207,13 @@ static unsigned int bufsiz=0; /* current size of buf */ static char * test_formataddr (char *orig, char *str) { - register int len; + int len; char error[BUFSIZ]; - register int isgroup; - register char *dst; - register char *cp; - register char *sp; - register struct mailname *mp = NULL; + int isgroup; + char *dst; + char *cp; + char *sp; + struct mailname *mp = NULL; /* if we don't have a buffer yet, get one */ if (bufsiz == 0) { @@ -1329,10 +1300,10 @@ insert (struct mailname *np) return 0; for (mp = &mq; mp->m_next; mp = mp->m_next) { - if (!strcasecmp (np->m_host ? np->m_host : "", - mp->m_next->m_host ? mp->m_next->m_host : "") && - !strcasecmp (np->m_mbox ? np->m_mbox : "", - mp->m_next->m_mbox ? mp->m_next->m_mbox : "")) + if (!strcasecmp (FENDNULL(np->m_host), + FENDNULL(mp->m_next->m_host)) && + !strcasecmp (FENDNULL(np->m_mbox), + FENDNULL(mp->m_next->m_mbox))) return 0; } if (!ccme && ismymbox (np)) @@ -1352,8 +1323,8 @@ mlistfree(void) { struct mailname *mp, *mp2; - for (mp = mq.m_next; mp; mp = mp2->m_next) { - mp2 = mp; + for (mp = mq.m_next; mp; mp = mp2) { + mp2 = mp->m_next; mnfree(mp); } }