=================================================================== RCS file: /cvs/mandoc/mdoc_argv.c,v retrieving revision 1.93 retrieving revision 1.97 diff -u -p -r1.93 -r1.97 --- mandoc/mdoc_argv.c 2014/04/23 21:06:41 1.93 +++ mandoc/mdoc_argv.c 2014/11/28 03:14:18 1.97 @@ -1,4 +1,4 @@ -/* $Id: mdoc_argv.c,v 1.93 2014/04/23 21:06:41 schwarze Exp $ */ +/* $OpenBSD: mdoc_argv.c,v 1.97 2014/11/28 03:14:18 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2012 Ingo Schwarze @@ -15,9 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include @@ -56,9 +54,9 @@ static void argn_free(struct mdoc_arg *, int); static enum margserr args(struct mdoc *, int, int *, char *, enum argsflag, char **); static int args_checkpunct(const char *, int); -static int argv_multi(struct mdoc *, int, +static void argv_multi(struct mdoc *, int, struct mdoc_argv *, int *, char *); -static int argv_single(struct mdoc *, int, +static void argv_single(struct mdoc *, int, struct mdoc_argv *, int *, char *); static const enum argvflag argvflags[MDOC_ARG_MAX] = { @@ -179,7 +177,7 @@ static const struct mdocarg mdocargs[MDOC_MAX] = { { ARGSFL_NONE, NULL }, /* Nd */ { ARGSFL_DELIM, NULL }, /* Nm */ { ARGSFL_DELIM, NULL }, /* Op */ - { ARGSFL_NONE, NULL }, /* Ot */ + { ARGSFL_DELIM, NULL }, /* Ot */ { ARGSFL_DELIM, NULL }, /* Pa */ { ARGSFL_NONE, args_Ex }, /* Rv */ { ARGSFL_DELIM, NULL }, /* St */ @@ -249,7 +247,7 @@ static const struct mdocarg mdocargs[MDOC_MAX] = { { ARGSFL_NONE, NULL }, /* Ek */ { ARGSFL_NONE, NULL }, /* Bt */ { ARGSFL_NONE, NULL }, /* Hf */ - { ARGSFL_NONE, NULL }, /* Fr */ + { ARGSFL_DELIM, NULL }, /* Fr */ { ARGSFL_NONE, NULL }, /* Ud */ { ARGSFL_DELIM, NULL }, /* Lb */ { ARGSFL_NONE, NULL }, /* Lp */ @@ -260,7 +258,7 @@ static const struct mdocarg mdocargs[MDOC_MAX] = { { ARGSFL_DELIM, NULL }, /* Brc */ { ARGSFL_NONE, NULL }, /* %C */ { ARGSFL_NONE, NULL }, /* Es */ - { ARGSFL_NONE, NULL }, /* En */ + { ARGSFL_DELIM, NULL }, /* En */ { ARGSFL_DELIM, NULL }, /* Dx */ { ARGSFL_NONE, NULL }, /* %Q */ { ARGSFL_NONE, NULL }, /* br */ @@ -344,12 +342,10 @@ mdoc_argv(struct mdoc *mdoc, int line, enum mdoct tok, switch (argvflags[tmp.arg]) { case ARGV_SINGLE: - if ( ! argv_single(mdoc, line, &tmp, pos, buf)) - return(ARGV_ERROR); + argv_single(mdoc, line, &tmp, pos, buf); break; case ARGV_MULTI: - if ( ! argv_multi(mdoc, line, &tmp, pos, buf)) - return(ARGV_ERROR); + argv_multi(mdoc, line, &tmp, pos, buf); break; case ARGV_NONE: break; @@ -461,7 +457,8 @@ args(struct mdoc *mdoc, int line, int *pos, * is unterminated. */ if (MDOC_PHRASELIT & mdoc->flags) - mdoc_pmsg(mdoc, line, *pos, MANDOCERR_BADQUOTE); + mandoc_msg(MANDOCERR_ARG_QUOTE, + mdoc->parse, line, *pos, NULL); mdoc->flags &= ~MDOC_PHRASELIT; return(ARGS_EOLN); @@ -520,7 +517,8 @@ args(struct mdoc *mdoc, int line, int *pos, /* Whitespace check for eoln case... */ if ('\0' == *p && ' ' == *(p - 1)) - mdoc_pmsg(mdoc, line, *pos, MANDOCERR_EOLNSPACE); + mandoc_msg(MANDOCERR_SPACE_EOL, mdoc->parse, + line, *pos, NULL); *pos += (int)(p - *v); @@ -575,7 +573,8 @@ args(struct mdoc *mdoc, int line, int *pos, if ('\0' == buf[*pos]) { if (MDOC_PPHRASE & mdoc->flags) return(ARGS_QWORD); - mdoc_pmsg(mdoc, line, *pos, MANDOCERR_BADQUOTE); + mandoc_msg(MANDOCERR_ARG_QUOTE, + mdoc->parse, line, *pos, NULL); return(ARGS_QWORD); } @@ -589,7 +588,8 @@ args(struct mdoc *mdoc, int line, int *pos, (*pos)++; if ('\0' == buf[*pos]) - mdoc_pmsg(mdoc, line, *pos, MANDOCERR_EOLNSPACE); + mandoc_msg(MANDOCERR_SPACE_EOL, mdoc->parse, + line, *pos, NULL); return(ARGS_QWORD); } @@ -650,7 +650,7 @@ args_checkpunct(const char *buf, int i) return('\0' == buf[i]); } -static int +static void argv_multi(struct mdoc *mdoc, int line, struct mdoc_argv *v, int *pos, char *buf) { @@ -658,25 +658,21 @@ argv_multi(struct mdoc *mdoc, int line, char *p; for (v->sz = 0; ; v->sz++) { - if ('-' == buf[*pos]) + if (buf[*pos] == '-') break; ac = args(mdoc, line, pos, buf, ARGSFL_NONE, &p); - if (ARGS_ERROR == ac) - return(0); - else if (ARGS_EOLN == ac) + if (ac == ARGS_EOLN) break; - if (0 == v->sz % MULTI_STEP) + if (v->sz % MULTI_STEP == 0) v->value = mandoc_reallocarray(v->value, v->sz + MULTI_STEP, sizeof(char *)); v->value[(int)v->sz] = mandoc_strdup(p); } - - return(1); } -static int +static void argv_single(struct mdoc *mdoc, int line, struct mdoc_argv *v, int *pos, char *buf) { @@ -684,14 +680,10 @@ argv_single(struct mdoc *mdoc, int line, char *p; ac = args(mdoc, line, pos, buf, ARGSFL_NONE, &p); - if (ARGS_ERROR == ac) - return(0); - if (ARGS_EOLN == ac) - return(1); + if (ac == ARGS_EOLN) + return; v->sz = 1; v->value = mandoc_malloc(sizeof(char *)); v->value[0] = mandoc_strdup(p); - - return(1); }