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

Diff for /mandoc/man.c between version 1.36 and 1.41

version 1.36, 2009/08/21 13:18:32 version 1.41, 2009/09/23 11:53:45
Line 14 
Line 14 
  * 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.
  */   */
   #include <sys/types.h>
   
 #include <assert.h>  #include <assert.h>
 #include <ctype.h>  #include <ctype.h>
 #include <stdarg.h>  #include <stdarg.h>
Line 54  const char *const __man_macronames[MAN_MAX] = {   
Line 56  const char *const __man_macronames[MAN_MAX] = {   
         "R",            "B",            "I",            "IR",          "R",            "B",            "I",            "IR",
         "RI",           "na",           "i",            "sp",          "RI",           "na",           "i",            "sp",
         "nf",           "fi",           "r",            "RE",          "nf",           "fi",           "r",            "RE",
         "RS",           "DT"          "RS",           "DT",           "UC"
         };          };
   
 const   char * const *man_macronames = __man_macronames;  const   char * const *man_macronames = __man_macronames;
Line 105  man_free(struct man *man)
Line 107  man_free(struct man *man)
 {  {
   
         man_free1(man);          man_free1(man);
   
         if (man->htab)  
                 man_hash_free(man->htab);  
         free(man);          free(man);
 }  }
   
Line 125  man_alloc(void *data, int pflags, const struct man_cb 
Line 124  man_alloc(void *data, int pflags, const struct man_cb 
                 return(NULL);                  return(NULL);
         }          }
   
           man_hash_init();
   
         p->data = data;          p->data = data;
         p->pflags = pflags;          p->pflags = pflags;
         (void)memcpy(&p->cb, cb, sizeof(struct man_cb));          (void)memcpy(&p->cb, cb, sizeof(struct man_cb));
   
         if (NULL == (p->htab = man_hash_alloc())) {  
                 free(p);  
                 return(NULL);  
         }  
         return(p);          return(p);
 }  }
   
Line 378  man_node_free(struct man_node *p)
Line 374  man_node_free(struct man_node *p)
 void  void
 man_node_freelist(struct man_node *p)  man_node_freelist(struct man_node *p)
 {  {
           struct man_node *n;
   
         if (p->child)          if (p->child)
                 man_node_freelist(p->child);                  man_node_freelist(p->child);
         if (p->next)  
                 man_node_freelist(p->next);  
   
         assert(0 == p->nchild);          assert(0 == p->nchild);
           n = p->next;
         man_node_free(p);          man_node_free(p);
           if (n)
                   man_node_freelist(n);
 }  }
   
   
Line 492  man_pmacro(struct man *m, int ln, char *buf)
Line 489  man_pmacro(struct man *m, int ln, char *buf)
                         break;                          break;
                 else if (' ' == buf[i])                  else if (' ' == buf[i])
                         break;                          break;
   
                   /* Check for invalid characters. */
   
                   if (isgraph((u_char)buf[i]))
                           continue;
                   return(man_perr(m, ln, i, WNPRINT));
         }          }
   
         mac[j] = 0;          mac[j] = 0;
Line 506  man_pmacro(struct man *m, int ln, char *buf)
Line 509  man_pmacro(struct man *m, int ln, char *buf)
                 return(1);                  return(1);
         }          }
   
         if (MAN_MAX == (c = man_hash_find(m->htab, mac))) {          if (MAN_MAX == (c = man_hash_find(mac))) {
                 if ( ! (MAN_IGN_MACRO & m->pflags)) {                  if ( ! (MAN_IGN_MACRO & m->pflags)) {
                         (void)man_perr(m, ln, ppos, WMACRO);                          (void)man_perr(m, ln, ppos, WMACRO);
                         goto err;                          goto err;
Line 526  man_pmacro(struct man *m, int ln, char *buf)
Line 529  man_pmacro(struct man *m, int ln, char *buf)
         if (m->flags & MAN_ELINE) {          if (m->flags & MAN_ELINE) {
                 n = m->last;                  n = m->last;
                 assert(NULL == n->child);                  assert(NULL == n->child);
                   assert(0 == n->nchild);
                 if ( ! man_nwarn(m, n, WLNSCOPE))                  if ( ! man_nwarn(m, n, WLNSCOPE))
                         return(0);                          return(0);
   
Line 534  man_pmacro(struct man *m, int ln, char *buf)
Line 538  man_pmacro(struct man *m, int ln, char *buf)
                         assert(n == n->prev->next);                          assert(n == n->prev->next);
                         n->prev->next = NULL;                          n->prev->next = NULL;
                         m->last = n->prev;                          m->last = n->prev;
                           m->next = MAN_NEXT_SIBLING;
                 } else {                  } else {
                         assert(n == n->parent->child);                          assert(n == n->parent->child);
                         n->parent->child = NULL;                          n->parent->child = NULL;
                         m->last = n->parent;                          m->last = n->parent;
                           m->next = MAN_NEXT_CHILD;
                 }                  }
   
                 man_node_free(n);                  man_node_free(n);

Legend:
Removed from v.1.36  
changed lines
  Added in v.1.41

CVSweb