* Sebastian Hammer, Adam Dickmeiss
*
* $Log: memory.c,v $
- * Revision 1.11 1996-02-10 12:20:58 quinn
+ * Revision 1.13 1996-03-20 13:29:16 quinn
+ * Bug-fix
+ *
+ * Revision 1.12 1996/03/11 14:52:23 quinn
+ * Fixed update bug. Repeated insertion in the same area sometimes caused
+ * problems.
+ *
+ * Revision 1.11 1996/02/10 12:20:58 quinn
* *** empty log message ***
*
* Revision 1.10 1995/12/12 14:12:47 quinn
tab->data->data = 0;
tab->cur_mblock = tab->data;
tab->cur_mblock->cur_mbuf = 0;
+ tab->last_mbuf = 0;
}
else /* new block */
{
tab->cur_mblock = tab->data;
tab->cur_mblock->cur_mbuf = tab->data->data;
tab->cur_mblock->cur_mbuf->cur_record = 0;
+ tab->last_mbuf = 0;
}
tab->is = is;
}
mbuf = tab->cur_mblock->cur_mbuf = mbuf->next;
mbuf->cur_record = 0;
}
+ /*
logf (LOG_DEBUG, "is_m_write_rec(rec == %d)", mbuf->cur_record);
+ */
memcpy(mbuf->data + mbuf->offset + mbuf->cur_record * is_keysize(tab->is),
rec, is_keysize(tab->is));
mbuf->num++;
void is_m_unread_record(is_mtable *tab)
{
assert(tab->cur_mblock->cur_mbuf->cur_record);
- tab->cur_mblock->cur_mbuf->cur_record--;
+ if (tab->last_mbuf)
+ tab->cur_mblock->cur_mbuf = tab->last_mbuf;
+ else
+ tab->cur_mblock->cur_mbuf->cur_record--;
}
/*
if (read_current_full(tab, tab->cur_mblock) < 0)
return -1;
tab->cur_mblock->cur_mbuf = mbuf = tab->cur_mblock->data;
+ tab->last_mbuf = 0;
}
else
return 0; /* EOTable */
}
else
+ {
+ tab->last_mbuf = mbuf;
tab->cur_mblock->cur_mbuf = mbuf = mbuf->next;
+ }
mbuf->cur_record = 0;
}
+ else
+ tab->last_mbuf = 0;
memcpy(buf, mbuf->data + mbuf->offset + mbuf->cur_record *
is_keysize(tab->is), is_keysize(tab->is));
mbuf->cur_record++;