+ /* xlen < userlen, expanding needed ... */
+ if (DICT_size(p)+sizeof(Dict_char)+sizeof(Dict_ptr)+
+ userlen >=
+ DICT_bsize(p) - (1+DICT_nodir(p))*sizeof(short))
+ {
+ /* not enough room - split needed ... */
+ if (DICT_type(p) == 1)
+ {
+ clean_page(dict, ptr, p, NULL, 0, NULL);
+ return dict_ins(dict, str-1, ptr,
+ userlen, userinfo);
+ }
+ if (split_page(dict, ptr, p))
+ {
+ yaz_log(YLOG_FATAL, "Unable to split page %d\n", ptr);
+ assert(0);
+ }
+ return dict_ins(dict, str-1, ptr, userlen, userinfo);
+ }
+ else
+ { /* enough room - no split needed ... */
+ info = (char*)p + DICT_size(p);
+ memcpy(info, &subptr, sizeof(subptr));
+ memcpy(info+sizeof(Dict_ptr), &dc, sizeof(Dict_char));
+ info[sizeof(Dict_char)+sizeof(Dict_ptr)] = userlen;
+ memcpy(info+sizeof(Dict_char)+sizeof(Dict_ptr)+1,
+ userinfo, userlen);
+ indxp[-mid] = -DICT_size(p);
+ DICT_size(p) += sizeof(Dict_char)+sizeof(Dict_ptr)
+ +1+userlen;
+ DICT_type(p) = 1;
+ dict_bf_touch(dict->dbf, ptr);
+ }
+ if (xlen)
+ return 1;