* Sebastian Hammer, Adam Dickmeiss
*
* $Log: insert.c,v $
- * Revision 1.10 1994-10-05 12:16:48 adam
+ * 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
+ * Various cleanup. YAZ util used instead.
+ *
+ * Revision 1.10 1994/10/05 12:16:48 adam
* Pagesize is a resource now.
*
* Revision 1.9 1994/09/16 15:39:13 adam
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;
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<best_no; i++, indxp++)
+ for (i=0; i<best_no; i++, j++)
{
char *info, *info1;
int slen;
- assert (*indxp > 0);
-
- info = (char*) p + *indxp; /* entry start */
+ info = (char*) p + ((short*) p)[j];
+ /* entry start */
assert (*info == best_char);
slen = dict_strlen(info);
}
static void clean_page (Dict dict, Dict_ptr ptr, void *p, Dict_char *out,
- Dict_ptr subptr, char *userinfo)
+ Dict_ptr subptr, char *userinfo)
{
char *np = xmalloc (dict->head.page_size);
int i, slen, no = 0;
info2 += slen;
++no;
}
+#if 1
+ memcpy ((char*)p+DICT_infoffset,
+ (char*)np+DICT_infoffset,
+ info2 - ((char*)np+DICT_infoffset));
+ memcpy ((char*)p + ((char*)indxp2 - (char*)np),
+ indxp2,
+ ((char*) np+DICT_pagesize(dict)) - (char*)indxp2);
+#else
memcpy ((char*)p+DICT_infoffset, (char*)np+DICT_infoffset,
DICT_pagesize(dict)-DICT_infoffset);
+#endif
DICT_size(p) = info2 - np;
DICT_type(p) = 0;
DICT_nodir(p) = no;
}
if (split_page (dict, ptr, p))
{
- log (LOG_FATAL, "Unable to split page %d\n", ptr);
+ logf (LOG_FATAL, "Unable to split page %d\n", ptr);
abort ();
}
return dict_ins (dict, str-1, ptr, userlen, userinfo);