[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.118 and 1.119

version 1.118, 2018/12/14 06:33:14 version 1.119, 2018/12/21 17:15:19
Line 416  mdoc_args(struct roff_man *mdoc, int line, int *pos,
Line 416  mdoc_args(struct roff_man *mdoc, int line, int *pos,
         char *buf, enum roff_tok tok, char **v)          char *buf, enum roff_tok tok, char **v)
 {  {
         struct roff_node *n;          struct roff_node *n;
         char             *v_local;  
         enum argsflag     fl;          enum argsflag     fl;
   
         if (v == NULL)  
                 v = &v_local;  
         fl = tok == TOKEN_NONE ? ARGSFL_NONE : mdocargs[tok - MDOC_Dd].flags;          fl = tok == TOKEN_NONE ? ARGSFL_NONE : mdocargs[tok - MDOC_Dd].flags;
   
         /*          /*
Line 448  args(struct roff_man *mdoc, int line, int *pos,
Line 445  args(struct roff_man *mdoc, int line, int *pos,
                 char *buf, enum argsflag fl, char **v)                  char *buf, enum argsflag fl, char **v)
 {  {
         char            *p;          char            *p;
           char            *v_local;
         int              pairs;          int              pairs;
   
         if (buf[*pos] == '\0') {          if (buf[*pos] == '\0') {
Line 459  args(struct roff_man *mdoc, int line, int *pos,
Line 457  args(struct roff_man *mdoc, int line, int *pos,
                 return ARGS_EOLN;                  return ARGS_EOLN;
         }          }
   
           if (v == NULL)
                   v = &v_local;
         *v = buf + *pos;          *v = buf + *pos;
   
         if (fl == ARGSFL_DELIM && args_checkpunct(buf, *pos))          if (fl == ARGSFL_DELIM && args_checkpunct(buf, *pos))
Line 525  args(struct roff_man *mdoc, int line, int *pos,
Line 525  args(struct roff_man *mdoc, int line, int *pos,
          * Whitespace is NOT involved in literal termination.           * Whitespace is NOT involved in literal termination.
          */           */
   
         if (mdoc->flags & MDOC_PHRASELIT || buf[*pos] == '\"') {          if (mdoc->flags & MDOC_PHRASELIT ||
                 if ( ! (mdoc->flags & MDOC_PHRASELIT))              (mdoc->flags & MDOC_PHRASE && buf[*pos] == '\"')) {
                   if ((mdoc->flags & MDOC_PHRASELIT) == 0) {
                         *v = &buf[++(*pos)];                          *v = &buf[++(*pos)];
   
                 if (mdoc->flags & MDOC_PHRASE)  
                         mdoc->flags |= MDOC_PHRASELIT;                          mdoc->flags |= MDOC_PHRASELIT;
                   }
                 pairs = 0;                  pairs = 0;
                 for ( ; buf[*pos]; (*pos)++) {                  for ( ; buf[*pos]; (*pos)++) {
                         /* Move following text left after quoted quotes. */                          /* Move following text left after quoted quotes. */
Line 572  args(struct roff_man *mdoc, int line, int *pos,
Line 571  args(struct roff_man *mdoc, int line, int *pos,
         }          }
   
         p = &buf[*pos];          p = &buf[*pos];
         *v = mandoc_getarg(&p, line, pos);          *v = roff_getarg(mdoc->roff, &p, line, pos);
           if (v == &v_local)
                   free(*v);
   
         /*          /*
          * After parsing the last word in this phrase,           * After parsing the last word in this phrase,
Line 583  args(struct roff_man *mdoc, int line, int *pos,
Line 584  args(struct roff_man *mdoc, int line, int *pos,
                 mdoc->flags &= ~MDOC_PHRASEQL;                  mdoc->flags &= ~MDOC_PHRASEQL;
                 mdoc->flags |= MDOC_PHRASEQF;                  mdoc->flags |= MDOC_PHRASEQF;
         }          }
         return ARGS_WORD;          return ARGS_ALLOC;
 }  }
   
 /*  /*
Line 654  argv_multi(struct roff_man *mdoc, int line,
Line 655  argv_multi(struct roff_man *mdoc, int line,
                         v->value = mandoc_reallocarray(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);                  if (ac != ARGS_ALLOC)
                           p = mandoc_strdup(p);
                   v->value[(int)v->sz] = p;
         }          }
 }  }
   
Line 669  argv_single(struct roff_man *mdoc, int line,
Line 672  argv_single(struct roff_man *mdoc, int line,
         if (ac == ARGS_EOLN)          if (ac == ARGS_EOLN)
                 return;                  return;
   
           if (ac != ARGS_ALLOC)
                   p = mandoc_strdup(p);
   
         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] = p;
 }  }

Legend:
Removed from v.1.118  
changed lines
  Added in v.1.119

CVSweb