Proposed patch; I'll write a ChangeLog entry if it's accepted. I have checked that this will hold for CHAR_BIT up to 1023. Custom tools used for checking this available upon request (part analytical, part experimental).
--- src/kwset.c 2005-07-04 01:14:37 -0400 +++ src/kwset.c 2005-07-04 11:45:33 -0400 @@ -121,6 +121,14 @@ kwsalloc (char const *trans) return (kwset_t) kwset; } +/* This upper bound is valid for CHAR_BIT >= 4 and + exact for CHAR_BIT in { 4..11, 13, 15, 17, 19 }. */ +#if CHAR_BIT < 4 +#error "CHAR_BIT is smaller than 4; yeah, right!" +#else +#define DEPTH_SIZE (CHAR_BIT + CHAR_BIT/2) +#endif + /* Add the given string to the contents of the keyword set. Return NULL for success, an error message otherwise. */ const char * @@ -131,8 +139,8 @@ kwsincr (kwset_t kws, char const *text, register unsigned char label; register struct tree *link; register int depth; - struct tree *links[12]; - enum { L, R } dirs[12]; + struct tree *links[DEPTH_SIZE]; + enum { L, R } dirs[DEPTH_SIZE]; struct tree *t, *r, *l, *rl, *lr; kwset = (struct kwset *) kws;