X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=dict%2Finsert.c;h=396640aa3c51732fb949b8c5691de4d1a259f1e3;hb=fe8a4ac0e92103284e9888f0c13c141f4711d9a3;hp=d43572c2d9e08481fc9f99229f3c4fbb052f5a58;hpb=26cf6c34f07849193e8aa42d90466d7712a2e09c;p=idzebra-moved-to-github.git diff --git a/dict/insert.c b/dict/insert.c index d43572c..396640a 100644 --- a/dict/insert.c +++ b/dict/insert.c @@ -4,7 +4,14 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: insert.c,v $ - * Revision 1.12 1995-09-06 10:34:44 adam + * Revision 1.14 1995-12-07 11:48:56 adam + * Insert operation obeys DICT_type = 1 (slack in page). + * Function dict_open exists if page size or magic aren't right. + * + * Revision 1.13 1995/11/28 09:06:37 adam + * Fixed potential dangling pointer. + * + * Revision 1.12 1995/09/06 10:34:44 adam * Memcpy in clean_page edited to satisfy checkergcc. * * Revision 1.11 1995/09/04 12:33:31 adam @@ -92,7 +99,7 @@ static int split_page (Dict dict, Dict_ptr ptr, void *p) void *subp; char *info_here; Dict_ptr subptr; - int i; + int i, j; short *indxp, *best_indxp = NULL; Dict_char best_char = 0; Dict_char prev_char = 0; @@ -131,18 +138,18 @@ static int split_page (Dict dict, Dict_ptr ptr, void *p) if (best_no < 0) /* we didn't find any tail string entry at all! */ return -1; + j = best_indxp - (short*) p; subptr = new_page (dict, ptr, &subp); /* scan entries to see if there is a string with */ /* length 1. info_here indicates if such entry exist */ info_here = NULL; - for (indxp=best_indxp, i=0; i 0); - - info = (char*) p + *indxp; /* entry start */ + info = (char*) p + ((short*) p)[j]; + /* entry start */ assert (*info == best_char); slen = dict_strlen(info); @@ -408,6 +415,11 @@ static int dict_ins (Dict dict, const Dict_char *str, if (DICT_size(p)+slen+userlen >= DICT_pagesize(dict) - (1+DICT_nodir(p))*sizeof(short)) /* overflow? */ { + if (DICT_type(p)) + { + clean_page (dict, ptr, p, NULL, 0, NULL); + return dict_ins (dict, str, ptr, userlen, userinfo); + } split_page (dict, ptr, p); return dict_ins (dict, str, ptr, userlen, userinfo); }