X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=dict%2Finsert.c;h=1b295d67a2579453d01fd77b650f3a5a8a065fce;hb=07daef4fb241a9106fb995bb87a823708babcb10;hp=6fd334e982f86a04e3c8fe0bd6c398580e414b0b;hpb=4ed5fbcd29d2a98b048d1d94510b262d352b4f7c;p=idzebra-moved-to-github.git diff --git a/dict/insert.c b/dict/insert.c index 6fd334e..1b295d6 100644 --- a/dict/insert.c +++ b/dict/insert.c @@ -1,84 +1,33 @@ -/* - * Copyright (C) 1994-1999, Index Data - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: insert.c,v $ - * Revision 1.20 1999-05-15 14:36:37 adam - * Updated dictionary. Implemented "compression" of dictionary. - * - * Revision 1.19 1999/02/02 14:50:22 adam - * Updated WIN32 code specific sections. Changed header. - * - * Revision 1.18 1998/03/05 08:17:24 adam - * Added a few comments - no code changed. - * - * Revision 1.17 1996/05/14 15:49:09 adam - * Bug fix: In function split_page. In rare cases variable best_indxp was - * referenced. - * - * Revision 1.16 1996/02/02 13:43:50 adam - * The public functions simply use char instead of Dict_char to represent - * search strings. Dict_char is used internally only. - * - * Revision 1.15 1996/02/01 20:39:59 adam - * Bug fix: insert didn't work on 8-bit characters due to unsigned char - * compares in dict_strcmp (strcmp) and signed Dict_char. Dict_char is - * unsigned now. - * - * 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 - * 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 - * Initial code of lookup - not tested yet. - * - * Revision 1.8 1994/09/16 12:35:01 adam - * New version of split_page which use clean_page for splitting. - * - * Revision 1.7 1994/09/12 08:06:42 adam - * Futher development of insert.c - * - * Revision 1.6 1994/09/06 13:05:15 adam - * Further development of insertion. Some special cases are - * not properly handled yet! assert(0) are put here. The - * binary search in each page definitely reduce usr CPU. - * - * Revision 1.5 1994/09/01 17:49:39 adam - * Removed stupid line. Work on insertion in dictionary. Not finished yet. - * - * Revision 1.4 1994/09/01 17:44:09 adam - * depend include change. - * - * Revision 1.3 1994/08/18 12:40:56 adam - * Some development of dictionary. Not finished at all! - * - * Revision 1.2 1994/08/17 13:32:19 adam - * Use cache in dict - not in bfile. - * - * Revision 1.1 1994/08/16 16:26:48 adam - * Added dict. - * - */ +/* $Id: insert.c,v 1.25 2005-01-15 19:38:21 adam Exp $ + Copyright (C) 1995-2005 + Index Data ApS + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + + #include #include #include #include -#include +#include "dict-p.h" #define CHECK 0 @@ -198,7 +147,7 @@ static int split_page (Dict dict, Dict_ptr ptr, void *p) static void clean_page (Dict dict, Dict_ptr ptr, void *p, Dict_char *out, Dict_ptr subptr, char *userinfo) { - char *np = xmalloc (dict->head.page_size); + char *np = (char *) xmalloc (dict->head.page_size); int i, slen, no = 0; short *indxp1, *indxp2; char *info1, *info2; @@ -394,7 +343,7 @@ static int dict_ins (Dict dict, const Dict_char *str, } if (split_page (dict, ptr, p)) { - logf (LOG_FATAL, "Unable to split page %d\n", ptr); + yaz_log (YLOG_FATAL, "Unable to split page %d\n", ptr); abort (); } return dict_ins (dict, str-1, ptr, userlen, userinfo); @@ -439,7 +388,7 @@ static int dict_ins (Dict dict, const Dict_char *str, --indxp; slen = (dict_strlen(str)+1)*sizeof(Dict_char); if (DICT_size(p)+slen+userlen >= - DICT_bsize(p) - (1+DICT_nodir(p))*sizeof(short)) /* overflow? */ + (int)(DICT_bsize(p) - (1+DICT_nodir(p))*sizeof(short)))/* overflow? */ { if (DICT_type(p)) {