- if (subptr == 0)
- return 0;
- ptr = subptr;
- dict_bf_readp (dict->dbf, ptr, &p);
- mid = lo = 0;
- hi = DICT_nodir(p)-1;
- indxp = (short*) ((char*) p+DICT_bsize(p)-sizeof(short));
- continue;
+ /* subptr may be 0 */
+ r = dict_del_string(dict, str, subptr, sub_flag, client, f);
+
+ /* recover */
+ dict_bf_readp(dict->dbf, ptr, &p);
+ indxp = (short*)
+ ((char*) p+DICT_bsize(p)-sizeof(short));
+ info = (char*)p - indxp[-mid];
+
+ if (r == 2)
+ { /* subptr page is empty and already removed */
+ hi = DICT_nodir(p)-1;
+ while (mid < hi)
+ {
+ indxp[-mid] = indxp[-mid-1];
+ mid++;
+ }
+ (DICT_nodir(p))--;
+ dict_bf_touch(dict->dbf, ptr);
+ r = 1;
+ }
+ subptr = 0; /* prevent dict_del_subtree (below) */