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

Diff for /mandoc/Attic/hash.c between version 1.3 and 1.9

version 1.3, 2008/12/23 05:30:49 version 1.9, 2009/03/10 10:20:03
Line 25 
Line 25 
   
 #include "private.h"  #include "private.h"
   
   /*
    * Routines for the perfect-hash hashtable used by the parser to look up
    * tokens by their string-ified names (`.Fl' -> MDOC_Fl).  The
    * allocation penalty for this is 27 * 26 * sizeof(ptr).
    */
   
 void  void
 mdoc_tokhash_free(void *htab)  mdoc_tokhash_free(void *htab)
Line 90  mdoc_tokhash_find(const void *arg, const char *tmp)
Line 95  mdoc_tokhash_find(const void *arg, const char *tmp)
   
         if (0 == tmp[0] || 0 == tmp[1])          if (0 == tmp[0] || 0 == tmp[1])
                 return(MDOC_MAX);                  return(MDOC_MAX);
           if (tmp[2] && tmp[3])
                   return(MDOC_MAX);
   
         if ( ! (tmp[0] == 37 || (tmp[0] >= 65 && tmp[0] <= 90)))          if ( ! (tmp[0] == 37 || (tmp[0] >= 65 && tmp[0] <= 90)))
                 return(MDOC_MAX);                  return(MDOC_MAX);
Line 112  mdoc_tokhash_find(const void *arg, const char *tmp)
Line 119  mdoc_tokhash_find(const void *arg, const char *tmp)
                 minor = tmp[1] - 97;                  minor = tmp[1] - 97;
   
         ind = (major * 27) + minor;          ind = (major * 27) + minor;
           if (ind < 0 || ind >= (27 * 26))
                   return(MDOC_MAX);
   
         if (NULL == htab[ind])          if (NULL == htab[ind])
                 return(MDOC_MAX);                  return(MDOC_MAX);
Line 121  mdoc_tokhash_find(const void *arg, const char *tmp)
Line 130  mdoc_tokhash_find(const void *arg, const char *tmp)
         assert(0 == (size_t)slot % sizeof(struct mdoc_macro));          assert(0 == (size_t)slot % sizeof(struct mdoc_macro));
         slot /= sizeof(struct mdoc_macro);          slot /= sizeof(struct mdoc_macro);
   
         if (0 != strcmp(mdoc_macronames[slot], tmp))          if (mdoc_macronames[slot][0] != tmp[0])
                 return(MDOC_MAX);                  return(MDOC_MAX);
           if (mdoc_macronames[slot][1] != tmp[1])
                   return(MDOC_MAX);
           if (tmp[2] && mdoc_macronames[slot][2] != tmp[2])
                   return(MDOC_MAX);
   
         return(slot);          return(slot);
 }  }
   

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.9

CVSweb