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

Diff for /mandoc/mdoc.c between version 1.112 and 1.113

version 1.112, 2009/10/27 08:26:12 version 1.113, 2009/10/30 05:58:38
Line 24 
Line 24 
 #include <string.h>  #include <string.h>
   
 #include "libmdoc.h"  #include "libmdoc.h"
   #include "libmandoc.h"
   
 const   char *const __mdoc_merrnames[MERRMAX] = {  const   char *const __mdoc_merrnames[MERRMAX] = {
         "trailing whitespace", /* ETAILWS */          "trailing whitespace", /* ETAILWS */
         "unexpected quoted parameter", /* EQUOTPARM */          "unexpected quoted parameter", /* EQUOTPARM */
         "unterminated quoted parameter", /* EQUOTTERM */          "unterminated quoted parameter", /* EQUOTTERM */
         "system: malloc error", /* EMALLOC */  
         "argument parameter suggested", /* EARGVAL */          "argument parameter suggested", /* EARGVAL */
         "macro disallowed in prologue", /* EBODYPROL */          "macro disallowed in prologue", /* EBODYPROL */
         "macro disallowed in body", /* EPROLBODY */          "macro disallowed in body", /* EPROLBODY */
Line 137  const char * const *mdoc_macronames = __mdoc_macroname
Line 137  const char * const *mdoc_macronames = __mdoc_macroname
 const   char * const *mdoc_argnames = __mdoc_argnames;  const   char * const *mdoc_argnames = __mdoc_argnames;
   
 static  void              mdoc_free1(struct mdoc *);  static  void              mdoc_free1(struct mdoc *);
 static  int               mdoc_alloc1(struct mdoc *);  static  void              mdoc_alloc1(struct mdoc *);
 static  struct mdoc_node *node_alloc(struct mdoc *, int, int,  static  struct mdoc_node *node_alloc(struct mdoc *, int, int,
                                 int, enum mdoc_type);                                  int, enum mdoc_type);
 static  int               node_append(struct mdoc *,  static  int               node_append(struct mdoc *,
Line 194  mdoc_free1(struct mdoc *mdoc)
Line 194  mdoc_free1(struct mdoc *mdoc)
 /*  /*
  * Allocate all volatile resources (parse tree, meta-data, fields).   * Allocate all volatile resources (parse tree, meta-data, fields).
  */   */
 static int  static void
 mdoc_alloc1(struct mdoc *mdoc)  mdoc_alloc1(struct mdoc *mdoc)
 {  {
   
         memset(&mdoc->meta, 0, sizeof(struct mdoc_meta));          memset(&mdoc->meta, 0, sizeof(struct mdoc_meta));
         mdoc->flags = 0;          mdoc->flags = 0;
         mdoc->lastnamed = mdoc->lastsec = SEC_NONE;          mdoc->lastnamed = mdoc->lastsec = SEC_NONE;
         mdoc->last = calloc(1, sizeof(struct mdoc_node));          mdoc->last = mandoc_calloc(1, sizeof(struct mdoc_node));
         if (NULL == mdoc->last)  
                 return(0);  
   
         mdoc->first = mdoc->last;          mdoc->first = mdoc->last;
         mdoc->last->type = MDOC_ROOT;          mdoc->last->type = MDOC_ROOT;
         mdoc->next = MDOC_NEXT_CHILD;          mdoc->next = MDOC_NEXT_CHILD;
         return(1);  
 }  }
   
   
Line 218  mdoc_alloc1(struct mdoc *mdoc)
Line 214  mdoc_alloc1(struct mdoc *mdoc)
  * and the parser is ready for re-invocation on a new tree; however,   * and the parser is ready for re-invocation on a new tree; however,
  * cross-parse non-volatile data is kept intact.   * cross-parse non-volatile data is kept intact.
  */   */
 int  void
 mdoc_reset(struct mdoc *mdoc)  mdoc_reset(struct mdoc *mdoc)
 {  {
   
         mdoc_free1(mdoc);          mdoc_free1(mdoc);
         return(mdoc_alloc1(mdoc));          mdoc_alloc1(mdoc);
 }  }
   
   
Line 248  mdoc_alloc(void *data, int pflags, const struct mdoc_c
Line 244  mdoc_alloc(void *data, int pflags, const struct mdoc_c
 {  {
         struct mdoc     *p;          struct mdoc     *p;
   
         if (NULL == (p = calloc(1, sizeof(struct mdoc))))          p = mandoc_calloc(1, sizeof(struct mdoc));
                 return(NULL);  
         if (cb)          if (cb)
                 (void)memcpy(&p->cb, cb, sizeof(struct mdoc_cb));                  memcpy(&p->cb, cb, sizeof(struct mdoc_cb));
   
         mdoc_hash_init();  
   
         p->data = data;          p->data = data;
         p->pflags = pflags;          p->pflags = pflags;
   
         if (mdoc_alloc1(p))          mdoc_hash_init();
                 return(p);          mdoc_alloc1(p);
           return(p);
         free(p);  
         return(NULL);  
 }  }
   
   
Line 438  node_alloc(struct mdoc *m, int line, 
Line 430  node_alloc(struct mdoc *m, int line, 
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
         if (NULL == (p = calloc(1, sizeof(struct mdoc_node)))) {          p = mandoc_calloc(1, sizeof(struct mdoc_node));
                 (void)mdoc_nerr(m, m->last, EMALLOC);  
                 return(NULL);  
         }  
   
         p->sec = m->lastsec;          p->sec = m->lastsec;
         p->line = line;          p->line = line;
         p->pos = pos;          p->pos = pos;
Line 460  mdoc_tail_alloc(struct mdoc *m, int line, int pos, int
Line 448  mdoc_tail_alloc(struct mdoc *m, int line, int pos, int
         struct mdoc_node *p;          struct mdoc_node *p;
   
         p = node_alloc(m, line, pos, tok, MDOC_TAIL);          p = node_alloc(m, line, pos, tok, MDOC_TAIL);
         if (NULL == p)  
                 return(0);  
         if ( ! node_append(m, p))          if ( ! node_append(m, p))
                 return(0);                  return(0);
         m->next = MDOC_NEXT_CHILD;          m->next = MDOC_NEXT_CHILD;
Line 478  mdoc_head_alloc(struct mdoc *m, int line, int pos, int
Line 464  mdoc_head_alloc(struct mdoc *m, int line, int pos, int
         assert(m->last);          assert(m->last);
   
         p = node_alloc(m, line, pos, tok, MDOC_HEAD);          p = node_alloc(m, line, pos, tok, MDOC_HEAD);
         if (NULL == p)  
                 return(0);  
         if ( ! node_append(m, p))          if ( ! node_append(m, p))
                 return(0);                  return(0);
         m->next = MDOC_NEXT_CHILD;          m->next = MDOC_NEXT_CHILD;
Line 493  mdoc_body_alloc(struct mdoc *m, int line, int pos, int
Line 477  mdoc_body_alloc(struct mdoc *m, int line, int pos, int
         struct mdoc_node *p;          struct mdoc_node *p;
   
         p = node_alloc(m, line, pos, tok, MDOC_BODY);          p = node_alloc(m, line, pos, tok, MDOC_BODY);
         if (NULL == p)  
                 return(0);  
         if ( ! node_append(m, p))          if ( ! node_append(m, p))
                 return(0);                  return(0);
         m->next = MDOC_NEXT_CHILD;          m->next = MDOC_NEXT_CHILD;
Line 509  mdoc_block_alloc(struct mdoc *m, int line, int pos, 
Line 491  mdoc_block_alloc(struct mdoc *m, int line, int pos, 
         struct mdoc_node *p;          struct mdoc_node *p;
   
         p = node_alloc(m, line, pos, tok, MDOC_BLOCK);          p = node_alloc(m, line, pos, tok, MDOC_BLOCK);
         if (NULL == p)  
                 return(0);  
         p->args = args;          p->args = args;
         if (p->args)          if (p->args)
                 (args->refcnt)++;                  (args->refcnt)++;
Line 528  mdoc_elem_alloc(struct mdoc *m, int line, int pos, 
Line 508  mdoc_elem_alloc(struct mdoc *m, int line, int pos, 
         struct mdoc_node *p;          struct mdoc_node *p;
   
         p = node_alloc(m, line, pos, tok, MDOC_ELEM);          p = node_alloc(m, line, pos, tok, MDOC_ELEM);
         if (NULL == p)  
                 return(0);  
         p->args = args;          p->args = args;
         if (p->args)          if (p->args)
                 (args->refcnt)++;                  (args->refcnt)++;
Line 547  pstring(struct mdoc *m, int line, int pos, const char 
Line 525  pstring(struct mdoc *m, int line, int pos, const char 
         size_t            sv;          size_t            sv;
   
         n = node_alloc(m, line, pos, -1, MDOC_TEXT);          n = node_alloc(m, line, pos, -1, MDOC_TEXT);
         if (NULL == n)          n->string = mandoc_malloc(len + 1);
                 return(mdoc_nerr(m, m->last, EMALLOC));  
   
         n->string = malloc(len + 1);  
         if (NULL == n->string) {  
                 free(n);  
                 return(mdoc_nerr(m, m->last, EMALLOC));  
         }  
   
         sv = strlcpy(n->string, p, len + 1);          sv = strlcpy(n->string, p, len + 1);
   
         /* Prohibit truncation. */          /* Prohibit truncation. */

Legend:
Removed from v.1.112  
changed lines
  Added in v.1.113

CVSweb