-int heap_inpd (struct heap_info *hi)
-{
- struct heap_cread_info hci;
- ISAMD_I isamd_i = (ISAMD_I) xmalloc (sizeof(*isamd_i));
-
- hci.key = (char *) xmalloc (KEY_SIZE);
- hci.mode = 1;
- hci.hi = hi;
- hci.more = heap_read_one (hi, hci.cur_name, hci.key);
-
- isamd_i->clientData = &hci;
- isamd_i->read_item = heap_cread_item;
-
- while (hci.more)
- {
- char this_name[INP_NAME_MAX];
- ISAMD_P isamd_p, isamd_p2;
- char *dict_info;
-
- strcpy (this_name, hci.cur_name);
- assert (hci.cur_name[1]);
- hi->no_diffs++;
- if ((dict_info = dict_lookup (hi->reg->dict, hci.cur_name)))
- {
- memcpy (&isamd_p, dict_info+1, sizeof(ISAMD_P));
- isamd_p2 = isamd_append (hi->reg->isamd, isamd_p, isamd_i);
- if (!isamd_p2)
- {
- hi->no_deletions++;
- if (!dict_delete (hi->reg->dict, this_name))
- abort();
- }
- else
- {
- hi->no_updates++;
- if (isamd_p2 != isamd_p)
- dict_insert (hi->reg->dict, this_name,
- sizeof(ISAMD_P), &isamd_p2);
- }
- }
- else
- {
- isamd_p = isamd_append (hi->reg->isamd, 0, isamd_i);
- hi->no_insertions++;
- dict_insert (hi->reg->dict, this_name, sizeof(ISAMD_P), &isamd_p);
- }
- }
- xfree (isamd_i);
- return 0;
-}
-
-int heap_inp (struct heap_info *hi)
-{
- char *info;
- char next_name[INP_NAME_MAX];
- char cur_name[INP_NAME_MAX];
- int key_buf_size = INP_BUF_START;
- int key_buf_ptr;
- char *next_key;
- char *key_buf;
- int more;
-
- next_key = (char *) xmalloc (KEY_SIZE);
- key_buf = (char *) xmalloc (key_buf_size);
- more = heap_read_one (hi, cur_name, key_buf);
- while (more) /* EOF ? */
- {
- int nmemb;
- key_buf_ptr = KEY_SIZE;
- while (1)
- {
- if (!(more = heap_read_one (hi, next_name, next_key)))
- break;
- if (*next_name && strcmp (next_name, cur_name))
- break;
- memcpy (key_buf + key_buf_ptr, next_key, KEY_SIZE);
- key_buf_ptr += KEY_SIZE;
- if (key_buf_ptr+(int) KEY_SIZE >= key_buf_size)
- {
- char *new_key_buf;
- new_key_buf = (char *) xmalloc (key_buf_size + INP_BUF_ADD);
- memcpy (new_key_buf, key_buf, key_buf_size);
- key_buf_size += INP_BUF_ADD;
- xfree (key_buf);
- key_buf = new_key_buf;
- }
- }
- hi->no_diffs++;
- nmemb = key_buf_ptr / KEY_SIZE;
- assert (nmemb * (int) KEY_SIZE == key_buf_ptr);
- if ((info = dict_lookup (hi->reg->dict, cur_name)))
- {
- ISAM_P isam_p, isam_p2;
- memcpy (&isam_p, info+1, sizeof(ISAM_P));
- isam_p2 = is_merge (hi->reg->isam, isam_p, nmemb, key_buf);
- if (!isam_p2)
- {
- hi->no_deletions++;
- if (!dict_delete (hi->reg->dict, cur_name))
- abort ();
- }
- else
- {
- hi->no_updates++;
- if (isam_p2 != isam_p)
- dict_insert (hi->reg->dict, cur_name,
- sizeof(ISAM_P), &isam_p2);
- }
- }
- else
- {
- ISAM_P isam_p;
- hi->no_insertions++;
- isam_p = is_merge (hi->reg->isam, 0, nmemb, key_buf);
- dict_insert (hi->reg->dict, cur_name, sizeof(ISAM_P), &isam_p);
- }
- memcpy (key_buf, next_key, KEY_SIZE);
- strcpy (cur_name, next_name);
- }
- return 0;
-}
-