[BACK]Return to mdoc_argv.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mdoc_argv.c between version 1.92 and 1.97

version 1.92, 2014/04/20 16:46:05 version 1.97, 2014/11/28 03:14:18
Line 1 
Line 1 
 /*      $Id$ */  /*      $OpenBSD$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2012 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2012 Ingo Schwarze <schwarze@openbsd.org>
Line 15 
Line 15 
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */   */
 #ifdef HAVE_CONFIG_H  
 #include "config.h"  #include "config.h"
 #endif  
   
 #include <sys/types.h>  #include <sys/types.h>
   
Line 56  static void   argn_free(struct mdoc_arg *, int);
Line 54  static void   argn_free(struct mdoc_arg *, int);
 static  enum margserr    args(struct mdoc *, int, int *,  static  enum margserr    args(struct mdoc *, int, int *,
                                 char *, enum argsflag, char **);                                  char *, enum argsflag, char **);
 static  int              args_checkpunct(const char *, int);  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 *);                                  struct mdoc_argv *, int *, char *);
 static  int              argv_single(struct mdoc *, int,  static  void             argv_single(struct mdoc *, int,
                                 struct mdoc_argv *, int *, char *);                                  struct mdoc_argv *, int *, char *);
   
 static  const enum argvflag argvflags[MDOC_ARG_MAX] = {  static  const enum argvflag argvflags[MDOC_ARG_MAX] = {
Line 179  static const struct mdocarg mdocargs[MDOC_MAX] = {
Line 177  static const struct mdocarg mdocargs[MDOC_MAX] = {
         { ARGSFL_NONE, NULL }, /* Nd */          { ARGSFL_NONE, NULL }, /* Nd */
         { ARGSFL_DELIM, NULL }, /* Nm */          { ARGSFL_DELIM, NULL }, /* Nm */
         { ARGSFL_DELIM, NULL }, /* Op */          { ARGSFL_DELIM, NULL }, /* Op */
         { ARGSFL_NONE, NULL }, /* Ot */          { ARGSFL_DELIM, NULL }, /* Ot */
         { ARGSFL_DELIM, NULL }, /* Pa */          { ARGSFL_DELIM, NULL }, /* Pa */
         { ARGSFL_NONE, args_Ex }, /* Rv */          { ARGSFL_NONE, args_Ex }, /* Rv */
         { ARGSFL_DELIM, NULL }, /* St */          { ARGSFL_DELIM, NULL }, /* St */
Line 249  static const struct mdocarg mdocargs[MDOC_MAX] = {
Line 247  static const struct mdocarg mdocargs[MDOC_MAX] = {
         { ARGSFL_NONE, NULL }, /* Ek */          { ARGSFL_NONE, NULL }, /* Ek */
         { ARGSFL_NONE, NULL }, /* Bt */          { ARGSFL_NONE, NULL }, /* Bt */
         { ARGSFL_NONE, NULL }, /* Hf */          { ARGSFL_NONE, NULL }, /* Hf */
         { ARGSFL_NONE, NULL }, /* Fr */          { ARGSFL_DELIM, NULL }, /* Fr */
         { ARGSFL_NONE, NULL }, /* Ud */          { ARGSFL_NONE, NULL }, /* Ud */
         { ARGSFL_DELIM, NULL }, /* Lb */          { ARGSFL_DELIM, NULL }, /* Lb */
         { ARGSFL_NONE, NULL }, /* Lp */          { ARGSFL_NONE, NULL }, /* Lp */
Line 260  static const struct mdocarg mdocargs[MDOC_MAX] = {
Line 258  static const struct mdocarg mdocargs[MDOC_MAX] = {
         { ARGSFL_DELIM, NULL }, /* Brc */          { ARGSFL_DELIM, NULL }, /* Brc */
         { ARGSFL_NONE, NULL }, /* %C */          { ARGSFL_NONE, NULL }, /* %C */
         { ARGSFL_NONE, NULL }, /* Es */          { ARGSFL_NONE, NULL }, /* Es */
         { ARGSFL_NONE, NULL }, /* En */          { ARGSFL_DELIM, NULL }, /* En */
         { ARGSFL_DELIM, NULL }, /* Dx */          { ARGSFL_DELIM, NULL }, /* Dx */
         { ARGSFL_NONE, NULL }, /* %Q */          { ARGSFL_NONE, NULL }, /* %Q */
         { ARGSFL_NONE, NULL }, /* br */          { ARGSFL_NONE, NULL }, /* br */
Line 344  mdoc_argv(struct mdoc *mdoc, int line, enum mdoct tok,
Line 342  mdoc_argv(struct mdoc *mdoc, int line, enum mdoct tok,
   
         switch (argvflags[tmp.arg]) {          switch (argvflags[tmp.arg]) {
         case ARGV_SINGLE:          case ARGV_SINGLE:
                 if ( ! argv_single(mdoc, line, &tmp, pos, buf))                  argv_single(mdoc, line, &tmp, pos, buf);
                         return(ARGV_ERROR);  
                 break;                  break;
         case ARGV_MULTI:          case ARGV_MULTI:
                 if ( ! argv_multi(mdoc, line, &tmp, pos, buf))                  argv_multi(mdoc, line, &tmp, pos, buf);
                         return(ARGV_ERROR);  
                 break;                  break;
         case ARGV_NONE:          case ARGV_NONE:
                 break;                  break;
Line 359  mdoc_argv(struct mdoc *mdoc, int line, enum mdoct tok,
Line 355  mdoc_argv(struct mdoc *mdoc, int line, enum mdoct tok,
                 arg = *v = mandoc_calloc(1, sizeof(struct mdoc_arg));                  arg = *v = mandoc_calloc(1, sizeof(struct mdoc_arg));
   
         arg->argc++;          arg->argc++;
         arg->argv = mandoc_realloc(arg->argv,          arg->argv = mandoc_reallocarray(arg->argv,
             arg->argc * sizeof(struct mdoc_argv));              arg->argc, sizeof(struct mdoc_argv));
   
         memcpy(&arg->argv[(int)arg->argc - 1], &tmp,          memcpy(&arg->argv[(int)arg->argc - 1], &tmp,
             sizeof(struct mdoc_argv));              sizeof(struct mdoc_argv));
Line 461  args(struct mdoc *mdoc, int line, int *pos,
Line 457  args(struct mdoc *mdoc, int line, int *pos,
                  * is unterminated.                   * is unterminated.
                  */                   */
                 if (MDOC_PHRASELIT & mdoc->flags)                  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;                  mdoc->flags &= ~MDOC_PHRASELIT;
                 return(ARGS_EOLN);                  return(ARGS_EOLN);
Line 520  args(struct mdoc *mdoc, int line, int *pos,
Line 517  args(struct mdoc *mdoc, int line, int *pos,
   
                 /* Whitespace check for eoln case... */                  /* Whitespace check for eoln case... */
                 if ('\0' == *p && ' ' == *(p - 1))                  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);                  *pos += (int)(p - *v);
   
Line 575  args(struct mdoc *mdoc, int line, int *pos,
Line 573  args(struct mdoc *mdoc, int line, int *pos,
                 if ('\0' == buf[*pos]) {                  if ('\0' == buf[*pos]) {
                         if (MDOC_PPHRASE & mdoc->flags)                          if (MDOC_PPHRASE & mdoc->flags)
                                 return(ARGS_QWORD);                                  return(ARGS_QWORD);
                         mdoc_pmsg(mdoc, line, *pos, MANDOCERR_BADQUOTE);                          mandoc_msg(MANDOCERR_ARG_QUOTE,
                               mdoc->parse, line, *pos, NULL);
                         return(ARGS_QWORD);                          return(ARGS_QWORD);
                 }                  }
   
Line 589  args(struct mdoc *mdoc, int line, int *pos,
Line 588  args(struct mdoc *mdoc, int line, int *pos,
                         (*pos)++;                          (*pos)++;
   
                 if ('\0' == buf[*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);                  return(ARGS_QWORD);
         }          }
Line 650  args_checkpunct(const char *buf, int i)
Line 650  args_checkpunct(const char *buf, int i)
         return('\0' == buf[i]);          return('\0' == buf[i]);
 }  }
   
 static int  static void
 argv_multi(struct mdoc *mdoc, int line,  argv_multi(struct mdoc *mdoc, int line,
                 struct mdoc_argv *v, int *pos, char *buf)                  struct mdoc_argv *v, int *pos, char *buf)
 {  {
Line 658  argv_multi(struct mdoc *mdoc, int line,
Line 658  argv_multi(struct mdoc *mdoc, int line,
         char            *p;          char            *p;
   
         for (v->sz = 0; ; v->sz++) {          for (v->sz = 0; ; v->sz++) {
                 if ('-' == buf[*pos])                  if (buf[*pos] == '-')
                         break;                          break;
                 ac = args(mdoc, line, pos, buf, ARGSFL_NONE, &p);                  ac = args(mdoc, line, pos, buf, ARGSFL_NONE, &p);
                 if (ARGS_ERROR == ac)                  if (ac == ARGS_EOLN)
                         return(0);  
                 else if (ARGS_EOLN == ac)  
                         break;                          break;
   
                 if (0 == v->sz % MULTI_STEP)                  if (v->sz % MULTI_STEP == 0)
                         v->value = mandoc_realloc(v->value,                          v->value = mandoc_reallocarray(v->value,
                             (v->sz + MULTI_STEP) * sizeof(char *));                              v->sz + MULTI_STEP, sizeof(char *));
   
                 v->value[(int)v->sz] = mandoc_strdup(p);                  v->value[(int)v->sz] = mandoc_strdup(p);
         }          }
   
         return(1);  
 }  }
   
 static int  static void
 argv_single(struct mdoc *mdoc, int line,  argv_single(struct mdoc *mdoc, int line,
                 struct mdoc_argv *v, int *pos, char *buf)                  struct mdoc_argv *v, int *pos, char *buf)
 {  {
Line 684  argv_single(struct mdoc *mdoc, int line,
Line 680  argv_single(struct mdoc *mdoc, int line,
         char            *p;          char            *p;
   
         ac = args(mdoc, line, pos, buf, ARGSFL_NONE, &p);          ac = args(mdoc, line, pos, buf, ARGSFL_NONE, &p);
         if (ARGS_ERROR == ac)          if (ac == ARGS_EOLN)
                 return(0);                  return;
         if (ARGS_EOLN == ac)  
                 return(1);  
   
         v->sz = 1;          v->sz = 1;
         v->value = mandoc_malloc(sizeof(char *));          v->value = mandoc_malloc(sizeof(char *));
         v->value[0] = mandoc_strdup(p);          v->value[0] = mandoc_strdup(p);
   
         return(1);  
 }  }

Legend:
Removed from v.1.92  
changed lines
  Added in v.1.97

CVSweb