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

Diff for /mandoc/mdoc_validate.c between version 1.204 and 1.205

version 1.204, 2014/03/23 12:11:18 version 1.205, 2014/03/23 15:14:50
Line 46 
Line 46 
 #define POST_ARGS struct mdoc *mdoc  #define POST_ARGS struct mdoc *mdoc
   
 #define NUMSIZ    32  #define NUMSIZ    32
 #define DATESIZE  32  
   
 enum    check_ineq {  enum    check_ineq {
         CHECK_LT,          CHECK_LT,
Line 74  static void  check_text(struct mdoc *, int, int, char 
Line 73  static void  check_text(struct mdoc *, int, int, char 
 static  void     check_argv(struct mdoc *,  static  void     check_argv(struct mdoc *,
                         struct mdoc_node *, struct mdoc_argv *);                          struct mdoc_node *, struct mdoc_argv *);
 static  void     check_args(struct mdoc *, struct mdoc_node *);  static  void     check_args(struct mdoc *, struct mdoc_node *);
 static  int      concat(char *, const struct mdoc_node *, size_t);  
 static  enum mdoc_sec   a2sec(const char *);  static  enum mdoc_sec   a2sec(const char *);
 static  size_t          macro2len(enum mdoct);  static  size_t          macro2len(enum mdoct);
   
Line 1123  post_vt(POST_ARGS)
Line 1121  post_vt(POST_ARGS)
 static int  static int
 post_nm(POST_ARGS)  post_nm(POST_ARGS)
 {  {
         char             buf[BUFSIZ];  
         int              c;  
   
         if (NULL != mdoc->meta.name)          if (NULL != mdoc->meta.name)
                 return(1);                  return(1);
   
         /* Try to use our children for setting the meta name. */          mdoc_deroff(&mdoc->meta.name, mdoc->last);
   
         if (NULL != mdoc->last->child) {          if (NULL == mdoc->meta.name) {
                 buf[0] = '\0';  
                 c = concat(buf, mdoc->last->child, BUFSIZ);  
         } else  
                 c = 0;  
   
         switch (c) {  
         case (-1):  
                 mdoc_nmsg(mdoc, mdoc->last->child, MANDOCERR_MEM);  
                 return(0);  
         case (0):  
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NONAME);                  mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NONAME);
                 mdoc->meta.name = mandoc_strdup("UNKNOWN");                  mdoc->meta.name = mandoc_strdup("UNKNOWN");
                 break;  
         default:  
                 mdoc->meta.name = mandoc_strdup(buf);  
                 break;  
         }          }
         return(1);          return(1);
 }  }
Line 1965  post_sh_body(POST_ARGS)
Line 1947  post_sh_body(POST_ARGS)
 static int  static int
 post_sh_head(POST_ARGS)  post_sh_head(POST_ARGS)
 {  {
         char             buf[BUFSIZ];  
         struct mdoc_node *n;          struct mdoc_node *n;
           const char      *secname;
         enum mdoc_sec    sec;          enum mdoc_sec    sec;
         int              c;  
   
         /*          /*
          * Process a new section.  Sections are either "named" or           * Process a new section.  Sections are either "named" or
Line 1977  post_sh_head(POST_ARGS)
Line 1958  post_sh_head(POST_ARGS)
          * manual sections.           * manual sections.
          */           */
   
           secname = NULL;
         sec = SEC_CUSTOM;          sec = SEC_CUSTOM;
         buf[0] = '\0';          n = mdoc->last;
         if (-1 == (c = concat(buf, mdoc->last->child, BUFSIZ))) {          if (n->child) {
                 mdoc_nmsg(mdoc, mdoc->last->child, MANDOCERR_MEM);                  assert(1 == n->nchild);
                 return(0);                  n = n->child;
         } else if (1 == c)                  assert(NULL != n);
                 sec = a2sec(buf);                  assert(MDOC_TEXT == n->type);
                   secname = n->string;
                   sec = a2sec(secname);
           }
   
         /* The NAME should be first. */          /* The NAME should be first. */
   
Line 2055  post_sh_head(POST_ARGS)
Line 2040  post_sh_head(POST_ARGS)
                 if (*mdoc->meta.msec == '9')                  if (*mdoc->meta.msec == '9')
                         break;                          break;
                 mandoc_msg(MANDOCERR_SECMSEC, mdoc->parse,                  mandoc_msg(MANDOCERR_SECMSEC, mdoc->parse,
                                 mdoc->last->line, mdoc->last->pos, buf);                      mdoc->last->line, mdoc->last->pos, secname);
                 break;                  break;
         default:          default:
                 break;                  break;
Line 2176  pre_literal(PRE_ARGS)
Line 2161  pre_literal(PRE_ARGS)
 static int  static int
 post_dd(POST_ARGS)  post_dd(POST_ARGS)
 {  {
         char              buf[DATESIZE];  
         struct mdoc_node *n;          struct mdoc_node *n;
         int               c;          char             *datestr;
   
         if (mdoc->meta.date)          if (mdoc->meta.date)
                 free(mdoc->meta.date);                  free(mdoc->meta.date);
Line 2190  post_dd(POST_ARGS)
Line 2174  post_dd(POST_ARGS)
                 return(1);                  return(1);
         }          }
   
         buf[0] = '\0';          datestr = NULL;
         if (-1 == (c = concat(buf, n->child, DATESIZE))) {          mdoc_deroff(&datestr, n);
                 mdoc_nmsg(mdoc, n->child, MANDOCERR_MEM);          if (mdoc->quick)
                 return(0);                  mdoc->meta.date = datestr;
           else {
                   mdoc->meta.date = mandoc_normdate(mdoc->parse,
                       datestr, n->line, n->pos);
                   free(datestr);
         }          }
   
         assert(c);  
         mdoc->meta.date = mdoc->quick ? mandoc_strdup(buf) :  
             mandoc_normdate(mdoc->parse, buf, n->line, n->pos);  
   
         return(1);          return(1);
 }  }
   
Line 2349  post_bx(POST_ARGS)
Line 2332  post_bx(POST_ARGS)
 static int  static int
 post_os(POST_ARGS)  post_os(POST_ARGS)
 {  {
         char              buf[BUFSIZ];  
 #ifndef OSNAME  #ifndef OSNAME
         struct utsname    utsname;          struct utsname    utsname;
         static char      *defbuf;          static char      *defbuf;
 #endif  #endif
         struct mdoc_node *n;          struct mdoc_node *n;
         int               c;  
   
         n = mdoc->last;          n = mdoc->last;
   
Line 2369  post_os(POST_ARGS)
Line 2350  post_os(POST_ARGS)
          */           */
   
         free(mdoc->meta.os);          free(mdoc->meta.os);
           mdoc->meta.os = NULL;
         buf[0] = '\0';          mdoc_deroff(&mdoc->meta.os, n);
         if (-1 == (c = concat(buf, n->child, BUFSIZ))) {          if (mdoc->meta.os)
                 mdoc_nmsg(mdoc, n->child, MANDOCERR_MEM);  
                 return(0);  
         }  
   
         assert(c);  
   
         if ('\0' != *buf) {  
                 mdoc->meta.os = mandoc_strdup(buf);  
                 return(1);                  return(1);
         }  
   
         if (mdoc->defos) {          if (mdoc->defos) {
                 mdoc->meta.os = mandoc_strdup(mdoc->defos);                  mdoc->meta.os = mandoc_strdup(mdoc->defos);
Line 2430  post_std(POST_ARGS)
Line 2402  post_std(POST_ARGS)
                 return(0);                  return(0);
   
         mdoc->last = nn;          mdoc->last = nn;
         return(1);  
 }  
   
 /*  
  * Concatenate a node, stopping at the first non-text.  
  * Concatenation is separated by a single whitespace.  
  * Returns -1 on fatal (string overrun) error, 0 if child nodes were  
  * encountered, 1 otherwise.  
  */  
 static int  
 concat(char *p, const struct mdoc_node *n, size_t sz)  
 {  
   
         for ( ; NULL != n; n = n->next) {  
                 if (MDOC_TEXT != n->type)  
                         return(0);  
                 if ('\0' != p[0] && strlcat(p, " ", sz) >= sz)  
                         return(-1);  
                 if (strlcat(p, n->string, sz) >= sz)  
                         return(-1);  
                 concat(p, n->child, sz);  
         }  
   
         return(1);          return(1);
 }  }
   

Legend:
Removed from v.1.204  
changed lines
  Added in v.1.205

CVSweb