* Sebastian Hammer, Adam Dickmeiss
*
* $Log: memory.c,v $
- * Revision 1.11 1996-02-10 12:20:58 quinn
+ * 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;
}
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++;
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: memory.h,v $
- * Revision 1.4 1995-12-06 15:48:47 quinn
+ * Revision 1.5 1996-03-11 14:52:25 quinn
+ * Fixed update bug. Repeated insertion in the same area sometimes caused
+ * problems.
+ *
+ * Revision 1.4 1995/12/06 15:48:47 quinn
* Fixed update-problem.
*
* Revision 1.3 1994/09/28 16:58:33 quinn
int num_records; /* total number of records */
int pos_type; /* blocktype */
is_mblock *cur_mblock;
+ is_mbuf *last_mbuf;
is_mblock *data; /* blocks contained in this table */
ISAM is;
} is_mtable;