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

Diff for /mandoc/Attic/hash.c between version 1.6 and 1.11

version 1.6, 2009/02/23 12:45:19 version 1.11, 2009/03/16 23:37:28
Line 1 
Line 1 
 /* $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>   * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the   * purpose with or without fee is hereby granted, provided that the
Line 45  mdoc_tokhash_alloc(void)
Line 45  mdoc_tokhash_alloc(void)
         int               i, major, minor, ind;          int               i, major, minor, ind;
         const void      **htab;          const void      **htab;
   
         htab = calloc(27 * 26, sizeof(struct mdoc_macro *));          htab = calloc(27 * 26 * 3, sizeof(struct mdoc_macro *));
         if (NULL == htab)          if (NULL == htab)
                 err(1, "calloc");                  err(1, "calloc");
   
Line 74  mdoc_tokhash_alloc(void)
Line 74  mdoc_tokhash_alloc(void)
                 assert(major >= 0 && major < 27);                  assert(major >= 0 && major < 27);
                 assert(minor >= 0 && minor < 26);                  assert(minor >= 0 && minor < 26);
   
                 ind = (major * 27) + minor;                  ind = (major * 27 * 3) + (minor * 3);
   
                 assert(NULL == htab[ind]);                  if (NULL == htab[ind]) {
                           htab[ind] = &mdoc_macros[i];
                           continue;
                   }
   
                   if (NULL == htab[++ind]) {
                           htab[ind] = &mdoc_macros[i];
                           continue;
                   }
   
                   assert(NULL == htab[++ind]);
                 htab[ind] = &mdoc_macros[i];                  htab[ind] = &mdoc_macros[i];
         }          }
   
Line 95  mdoc_tokhash_find(const void *arg, const char *tmp)
Line 105  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 116  mdoc_tokhash_find(const void *arg, const char *tmp)
Line 128  mdoc_tokhash_find(const void *arg, const char *tmp)
         else          else
                 minor = tmp[1] - 97;                  minor = tmp[1] - 97;
   
         ind = (major * 27) + minor;          ind = (major * 27 * 3) + (minor * 3);
         if (ind < 0 || ind >= (27 * 26))          if (ind < 0 || ind >= (27 * 26 * 3))
                 return(MDOC_MAX);                  return(MDOC_MAX);
   
         if (NULL == htab[ind])          if (htab[ind]) {
                 return(MDOC_MAX);                  slot = htab[ind] - /* LINTED */
                           (void *)mdoc_macros;
                   assert(0 == (size_t)slot % sizeof(struct mdoc_macro));
                   slot /= sizeof(struct mdoc_macro);
                   if (mdoc_macronames[slot][0] == tmp[0] &&
                                   mdoc_macronames[slot][1] == tmp[1] &&
                                   (0 == tmp[2] ||
                                    mdoc_macronames[slot][2] == tmp[2]))
                           return(slot);
                   ind++;
           }
   
           if (htab[ind]) {
                   slot = htab[ind] - /* LINTED */
                           (void *)mdoc_macros;
                   assert(0 == (size_t)slot % sizeof(struct mdoc_macro));
                   slot /= sizeof(struct mdoc_macro);
                   if (mdoc_macronames[slot][0] == tmp[0] &&
                                   mdoc_macronames[slot][1] == tmp[1] &&
                                   (0 == tmp[2] ||
                                    mdoc_macronames[slot][2] == tmp[2]))
                           return(slot);
                   ind++;
           }
   
           if (NULL == htab[ind])
                   return(MDOC_MAX);
         slot = htab[ind] - /* LINTED */          slot = htab[ind] - /* LINTED */
                 (void *)mdoc_macros;                  (void *)mdoc_macros;
         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 (mdoc_macronames[slot][0] == tmp[0] &&
                           mdoc_macronames[slot][1] == tmp[1] &&
                           (0 == tmp[2] ||
                            mdoc_macronames[slot][2] == tmp[2]))
                   return(slot);
   
         if (0 != strcmp(mdoc_macronames[slot], tmp))          return(MDOC_MAX);
                 return(MDOC_MAX);  
         return(slot);  
 }  }
   

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.11

CVSweb