X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=isam%2Fmemory.c;h=898465d4a96561ded40a7060d3a4861a22e2949c;hb=c9ac021f1381269609f3654384698f398cf46b96;hp=b5dcdfacb44e3b90a12fbe4b7865800885250d73;hpb=288e50e499479a436edb71358c51fb8317c26da3;p=idzebra-moved-to-github.git diff --git a/isam/memory.c b/isam/memory.c index b5dcdfa..898465d 100644 --- a/isam/memory.c +++ b/isam/memory.c @@ -4,7 +4,20 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: memory.c,v $ - * Revision 1.11 1996-02-10 12:20:58 quinn + * Revision 1.15 1997-09-09 13:38:11 adam + * Partial port to WIN95/NT. + * + * Revision 1.14 1996/10/29 13:56:56 adam + * Include of zebrautl.h instead of alexutil.h. + * + * 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 @@ -46,8 +59,10 @@ #include #include +#include +#include -#include +#include #include int is_mbuf_size[3] = { 0, 1024, 4096 }; @@ -154,6 +169,7 @@ void is_m_establish_tab(ISAM is, is_mtable *tab, ISAM_P pos) tab->data->data = 0; tab->cur_mblock = tab->data; tab->cur_mblock->cur_mbuf = 0; + tab->last_mbuf = 0; } else /* new block */ { @@ -166,6 +182,7 @@ void is_m_establish_tab(ISAM is, is_mtable *tab, ISAM_P pos) 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; } @@ -301,7 +318,9 @@ int is_m_write_record(is_mtable *tab, const void *rec) 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++; @@ -315,7 +334,10 @@ int is_m_write_record(is_mtable *tab, const void *rec) 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--; } /* @@ -383,14 +405,20 @@ int is_m_read_record(is_mtable *tab, void *buf, int keep) 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++;