[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.1 and 1.2

version 1.1, 2009/03/27 15:00:15 version 1.2, 2009/03/31 13:50:19
Line 20 
Line 20 
   
 #include <assert.h>  #include <assert.h>
 #include <ctype.h>  #include <ctype.h>
 #include <err.h>  
 #include <stdlib.h>  #include <stdlib.h>
 #include <stdio.h>  #include <stdio.h>
 #include <string.h>  #include <string.h>
Line 56  enum  mwarn {
Line 55  enum  mwarn {
   
 enum    merr {  enum    merr {
         EQUOTTERM,          EQUOTTERM,
           EMALLOC,
         EARGVAL          EARGVAL
 };  };
   
Line 73  static int   argv_multi(struct mdoc *, int, 
Line 73  static int   argv_multi(struct mdoc *, int, 
 static  int              pwarn(struct mdoc *, int, int, enum mwarn);  static  int              pwarn(struct mdoc *, int, int, enum mwarn);
 static  int              perr(struct mdoc *, int, int, enum merr);  static  int              perr(struct mdoc *, int, int, enum merr);
   
   #define verr(m, t) perr((m), (m)->last->line, (m)->last->pos, (t))
   
 /* Per-argument flags. */  /* Per-argument flags. */
   
 static  int mdoc_argvflags[MDOC_ARG_MAX] = {  static  int mdoc_argvflags[MDOC_ARG_MAX] = {
Line 294  mdoc_argv(struct mdoc *mdoc, int line, int tok,
Line 296  mdoc_argv(struct mdoc *mdoc, int line, int tok,
                 return(ARGV_ERROR);                  return(ARGV_ERROR);
   
         if (NULL == (arg = *v)) {          if (NULL == (arg = *v)) {
                 if (NULL == (*v = calloc(1, sizeof(struct mdoc_arg))))                  *v = calloc(1, sizeof(struct mdoc_arg));
                         err(1, "calloc");                  if (NULL == *v) {
                           (void)verr(mdoc, EMALLOC);
                           return(ARGV_ERROR);
                   }
                 arg = *v;                  arg = *v;
         }          }
   
         arg->argc++;          arg->argc++;
         arg->argv = xrealloc(arg->argv, arg->argc *          arg->argv = realloc(arg->argv, arg->argc *
                         sizeof(struct mdoc_argv));                          sizeof(struct mdoc_argv));
   
           if (NULL == arg->argv) {
                   (void)verr(mdoc, EMALLOC);
                   return(ARGV_ERROR);
           }
   
         (void)memcpy(&arg->argv[(int)arg->argc - 1],          (void)memcpy(&arg->argv[(int)arg->argc - 1],
                         &tmp, sizeof(struct mdoc_argv));                          &tmp, sizeof(struct mdoc_argv));
   
Line 323  mdoc_argv_free(struct mdoc_arg *p)
Line 333  mdoc_argv_free(struct mdoc_arg *p)
                 if (p->refcnt)                  if (p->refcnt)
                         return;                          return;
         }          }
   
         assert(p->argc);          assert(p->argc);
   
         /* LINTED */          /* LINTED */
Line 349  perr(struct mdoc *mdoc, int line, int pos, enum merr c
Line 358  perr(struct mdoc *mdoc, int line, int pos, enum merr c
         char            *p;          char            *p;
   
         p = NULL;          p = NULL;
   
         switch (code) {          switch (code) {
           case (EMALLOC):
                   p = "memory exhausted";
                   break;
         case (EQUOTTERM):          case (EQUOTTERM):
                 p = "unterminated quoted parameter";                  p = "unterminated quoted parameter";
                 break;                  break;
Line 358  perr(struct mdoc *mdoc, int line, int pos, enum merr c
Line 369  perr(struct mdoc *mdoc, int line, int pos, enum merr c
                 p = "argument requires a value";                  p = "argument requires a value";
                 break;                  break;
         }          }
   
         assert(p);          assert(p);
         return(mdoc_perr(mdoc, line, pos, p));          return(mdoc_perr(mdoc, line, pos, p));
 }  }
Line 372  pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn
Line 382  pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn
   
         p = NULL;          p = NULL;
         c = WARN_SYNTAX;          c = WARN_SYNTAX;
   
         switch (code) {          switch (code) {
         case (WQUOTPARM):          case (WQUOTPARM):
                 p = "unexpected quoted parameter";                  p = "unexpected quoted parameter";
Line 389  pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn
Line 398  pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn
                 c = WARN_COMPAT;                  c = WARN_COMPAT;
                 break;                  break;
         }          }
   
         assert(p);          assert(p);
         return(mdoc_pwarn(mdoc, line, pos, c, p));          return(mdoc_pwarn(mdoc, line, pos, c, p));
 }  }
Line 660  argv_a2arg(int tok, const char *argv)
Line 668  argv_a2arg(int tok, const char *argv)
   
         switch (tok) {          switch (tok) {
         case (MDOC_An):          case (MDOC_An):
                 if (xstrcmp(argv, "split"))                  if (0 == strcmp(argv, "split"))
                         return(MDOC_Split);                          return(MDOC_Split);
                 else if (xstrcmp(argv, "nosplit"))                  else if (0 == strcmp(argv, "nosplit"))
                         return(MDOC_Nosplit);                          return(MDOC_Nosplit);
                 break;                  break;
   
         case (MDOC_Bd):          case (MDOC_Bd):
                 if (xstrcmp(argv, "ragged"))                  if (0 == strcmp(argv, "ragged"))
                         return(MDOC_Ragged);                          return(MDOC_Ragged);
                 else if (xstrcmp(argv, "unfilled"))                  else if (0 == strcmp(argv, "unfilled"))
                         return(MDOC_Unfilled);                          return(MDOC_Unfilled);
                 else if (xstrcmp(argv, "filled"))                  else if (0 == strcmp(argv, "filled"))
                         return(MDOC_Filled);                          return(MDOC_Filled);
                 else if (xstrcmp(argv, "literal"))                  else if (0 == strcmp(argv, "literal"))
                         return(MDOC_Literal);                          return(MDOC_Literal);
                 else if (xstrcmp(argv, "file"))                  else if (0 == strcmp(argv, "file"))
                         return(MDOC_File);                          return(MDOC_File);
                 else if (xstrcmp(argv, "offset"))                  else if (0 == strcmp(argv, "offset"))
                         return(MDOC_Offset);                          return(MDOC_Offset);
                 else if (xstrcmp(argv, "compact"))                  else if (0 == strcmp(argv, "compact"))
                         return(MDOC_Compact);                          return(MDOC_Compact);
                 break;                  break;
   
         case (MDOC_Bf):          case (MDOC_Bf):
                 if (xstrcmp(argv, "emphasis"))                  if (0 == strcmp(argv, "emphasis"))
                         return(MDOC_Emphasis);                          return(MDOC_Emphasis);
                 else if (xstrcmp(argv, "literal"))                  else if (0 == strcmp(argv, "literal"))
                         return(MDOC_Literal);                          return(MDOC_Literal);
                 else if (xstrcmp(argv, "symbolic"))                  else if (0 == strcmp(argv, "symbolic"))
                         return(MDOC_Symbolic);                          return(MDOC_Symbolic);
                 break;                  break;
   
         case (MDOC_Bk):          case (MDOC_Bk):
                 if (xstrcmp(argv, "words"))                  if (0 == strcmp(argv, "words"))
                         return(MDOC_Words);                          return(MDOC_Words);
                 break;                  break;
   
         case (MDOC_Bl):          case (MDOC_Bl):
                 if (xstrcmp(argv, "bullet"))                  if (0 == strcmp(argv, "bullet"))
                         return(MDOC_Bullet);                          return(MDOC_Bullet);
                 else if (xstrcmp(argv, "dash"))                  else if (0 == strcmp(argv, "dash"))
                         return(MDOC_Dash);                          return(MDOC_Dash);
                 else if (xstrcmp(argv, "hyphen"))                  else if (0 == strcmp(argv, "hyphen"))
                         return(MDOC_Hyphen);                          return(MDOC_Hyphen);
                 else if (xstrcmp(argv, "item"))                  else if (0 == strcmp(argv, "item"))
                         return(MDOC_Item);                          return(MDOC_Item);
                 else if (xstrcmp(argv, "enum"))                  else if (0 == strcmp(argv, "enum"))
                         return(MDOC_Enum);                          return(MDOC_Enum);
                 else if (xstrcmp(argv, "tag"))                  else if (0 == strcmp(argv, "tag"))
                         return(MDOC_Tag);                          return(MDOC_Tag);
                 else if (xstrcmp(argv, "diag"))                  else if (0 == strcmp(argv, "diag"))
                         return(MDOC_Diag);                          return(MDOC_Diag);
                 else if (xstrcmp(argv, "hang"))                  else if (0 == strcmp(argv, "hang"))
                         return(MDOC_Hang);                          return(MDOC_Hang);
                 else if (xstrcmp(argv, "ohang"))                  else if (0 == strcmp(argv, "ohang"))
                         return(MDOC_Ohang);                          return(MDOC_Ohang);
                 else if (xstrcmp(argv, "inset"))                  else if (0 == strcmp(argv, "inset"))
                         return(MDOC_Inset);                          return(MDOC_Inset);
                 else if (xstrcmp(argv, "column"))                  else if (0 == strcmp(argv, "column"))
                         return(MDOC_Column);                          return(MDOC_Column);
                 else if (xstrcmp(argv, "width"))                  else if (0 == strcmp(argv, "width"))
                         return(MDOC_Width);                          return(MDOC_Width);
                 else if (xstrcmp(argv, "offset"))                  else if (0 == strcmp(argv, "offset"))
                         return(MDOC_Offset);                          return(MDOC_Offset);
                 else if (xstrcmp(argv, "compact"))                  else if (0 == strcmp(argv, "compact"))
                         return(MDOC_Compact);                          return(MDOC_Compact);
                 else if (xstrcmp(argv, "nested"))                  else if (0 == strcmp(argv, "nested"))
                         return(MDOC_Nested);                          return(MDOC_Nested);
                 break;                  break;
   
         case (MDOC_Rv):          case (MDOC_Rv):
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_Ex):          case (MDOC_Ex):
                 if (xstrcmp(argv, "std"))                  if (0 == strcmp(argv, "std"))
                         return(MDOC_Std);                          return(MDOC_Std);
                 break;                  break;
         default:          default:
Line 762  argv_multi(struct mdoc *mdoc, int line, 
Line 770  argv_multi(struct mdoc *mdoc, int line, 
                 else if (ARGS_EOLN == c)                  else if (ARGS_EOLN == c)
                         break;                          break;
   
                 if (0 == v->sz % MULTI_STEP)                  if (0 == v->sz % MULTI_STEP) {
                         v->value = xrealloc(v->value,                          v->value = realloc(v->value,
                                 (v->sz + MULTI_STEP) * sizeof(char *));                                  (v->sz + MULTI_STEP) * sizeof(char *));
                           if (NULL == v->value) {
                                   (void)verr(mdoc, EMALLOC);
                                   return(ARGV_ERROR);
                           }
                   }
                 if (NULL == (v->value[(int)v->sz] = strdup(p)))                  if (NULL == (v->value[(int)v->sz] = strdup(p)))
                         err(1, "strdup");                          return(verr(mdoc, EMALLOC));
         }          }
   
         if (v->sz)          if (v->sz)
Line 794  argv_opt_single(struct mdoc *mdoc, int line, 
Line 807  argv_opt_single(struct mdoc *mdoc, int line, 
   
         v->sz = 1;          v->sz = 1;
         if (NULL == (v->value = calloc(1, sizeof(char *))))          if (NULL == (v->value = calloc(1, sizeof(char *))))
                 err(1, "calloc");                  return(verr(mdoc, EMALLOC));
         if (NULL == (v->value[0] = strdup(p)))          if (NULL == (v->value[0] = strdup(p)))
                 err(1, "strdup");                  return(verr(mdoc, EMALLOC));
   
         return(1);          return(1);
 }  }
   
Line 821  argv_single(struct mdoc *mdoc, int line, 
Line 835  argv_single(struct mdoc *mdoc, int line, 
   
         v->sz = 1;          v->sz = 1;
         if (NULL == (v->value = calloc(1, sizeof(char *))))          if (NULL == (v->value = calloc(1, sizeof(char *))))
                 err(1, "calloc");                  return(verr(mdoc, EMALLOC));
         if (NULL == (v->value[0] = strdup(p)))          if (NULL == (v->value[0] = strdup(p)))
                 err(1, "strdup");                  return(verr(mdoc, EMALLOC));
   
         return(1);          return(1);
 }  }
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

CVSweb