*** empty log message ***
[idzebra-moved-to-github.git] / isam / physical.c
index ae1f584..9dccb47 100644 (file)
@@ -4,7 +4,16 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: physical.c,v $
- * Revision 1.4  1994-09-27 20:03:53  quinn
+ * Revision 1.7  1995-12-06 14:48:27  quinn
+ * Fixed some strange bugs.
+ *
+ * Revision 1.6  1995/09/04  12:33:47  adam
+ * Various cleanup. YAZ util used instead.
+ *
+ * Revision 1.5  1994/09/28  11:29:33  quinn
+ * Added cmp parameter.
+ *
+ * Revision 1.4  1994/09/27  20:03:53  quinn
  * Seems relatively bug-free.
  *
  * Revision 1.3  1994/09/26  17:11:31  quinn
@@ -23,6 +32,7 @@
  */
 
 #include <assert.h>
+#include <stdio.h>
 
 #include <isam.h>
 
@@ -36,14 +46,14 @@ static int is_freestore_alloc(ISAM is, int type)
        if (bf_read(is->types[type].bf, tmp, 0, sizeof(tmp),
            &is->types[type].freelist) <=0)
        {
-           log(LOG_FATAL, "Failed to allocate block");
+           logf (LOG_FATAL, "Failed to allocate block");
            exit(1);
        }
     }
     else
        tmp = is->types[type].top++;
 
-    log(LOG_DEBUG, "Allocating block #%d", tmp);
+    logf (LOG_DEBUG, "Allocating block #%d", tmp);
     return tmp;
 }
 
@@ -51,12 +61,12 @@ static void is_freestore_free(ISAM is, int type, int block)
 {
     int tmp;
 
-    log(LOG_DEBUG, "Releasing block #%d", block);
+    logf (LOG_DEBUG, "Releasing block #%d", block);
     tmp = is->types[type].freelist;
     is->types[type].freelist = block;
     if (bf_write(is->types[type].bf, block, 0, sizeof(tmp), &tmp) < 0)
     {
-       log(LOG_FATAL, "Failed to deallocate block.");
+       logf (LOG_FATAL, "Failed to deallocate block.");
        exit(1);
     }
 }
@@ -80,7 +90,7 @@ int is_p_read_partial(is_mtable *tab, is_mblock *block)
     if (bf_read(tab->is->types[tab->pos_type].bf, block->diskpos, 0, toread,
        buf->data) < 0)
     {
-       log(LOG_FATAL, "bfread failed.");
+       logf (LOG_FATAL, "bfread failed.");
        return -1;
     }
     /* extract header info */
@@ -114,7 +124,7 @@ int is_p_read_full(is_mtable *tab, is_mblock *block)
 
     if (block->state == IS_MBSTATE_UNREAD && is_p_read_partial(tab, block) < 0)
     {
-       log(LOG_FATAL, "partial read failed.");
+       logf (LOG_FATAL, "partial read failed.");
        return -1;
     }
     if (block->state == IS_MBSTATE_PARTIAL)
@@ -133,7 +143,7 @@ int is_p_read_full(is_mtable *tab, is_mblock *block)
            if (bf_read(tab->is->types[tab->pos_type].bf, block->diskpos, block->bread, toread *
                is_keysize(tab->is), buf->data) < 0)
            {
-               log(LOG_FATAL, "bfread failed.");
+               logf (LOG_FATAL, "bfread failed.");
                return -1;
            }
            buf->offset = 0;
@@ -141,8 +151,9 @@ int is_p_read_full(is_mtable *tab, is_mblock *block)
            dread += toread;
            block->bread += toread * is_keysize(tab->is);
        }
+       block->state = IS_MBSTATE_CLEAN;
     }
-    log(LOG_DEBUG, "R: Block #%d contains %d records.", block->diskpos, block->num_records);
+    logf (LOG_DEBUG, "R: Block #%d contains %d records.", block->diskpos, block->num_records);
     return 0;
 }
 
@@ -160,11 +171,6 @@ void is_p_sync(is_mtable *tab)
     type = &tab->is->types[tab->pos_type];
     for (p = tab->data; p; p = p->next)
     {
-    int fummy;
-/*
-if (p->num_records == 0)
-       fummy = 1/0;
-*/
        if (p->state < IS_MBSTATE_DIRTY)
            continue;
        /* make sure that blocks are allocated. */
@@ -200,10 +206,10 @@ if (p->num_records == 0)
        }
        if (bf_write(type->bf, p->diskpos, 0, sum, type->dbuf) < 0)
        {
-           log(LOG_FATAL, "Failed to write block.");
+           logf (LOG_FATAL, "Failed to write block.");
            exit(1);
        }
-       log(LOG_DEBUG, "W: Block #%d contains %d records.", p->diskpos, p->num_records);
+       logf (LOG_DEBUG, "W: Block #%d contains %d records.", p->diskpos, p->num_records);
     }
 }
 
@@ -267,7 +273,7 @@ void is_p_align(is_mtable *tab)
     is_mbuf *mbufs, *mbp;
     int blocks, recsblock;
 
-    log(LOG_DEBUG, "Realigning table.");
+    logf (LOG_DEBUG, "Realigning table.");
     for (mblock = tab->data; mblock; mblock = next)
     {
         next = mblock->next;
@@ -338,14 +344,14 @@ void is_p_remap(is_mtable *tab)
     is_mblock *blockp, **blockpp;
     int recsblock, blocks;
 
-    log(LOG_DEBUG, "Remapping table.");
+    logf (LOG_DEBUG, "Remapping table.");
     /* collect all data */
     bufpp = &mbufs;
     for (blockp = tab->data; blockp; blockp = blockp->next)
     {
        if (blockp->state < IS_MBSTATE_CLEAN && is_m_read_full(tab, blockp) < 0)
        {
-           log(LOG_FATAL, "Read-full failed in remap.");
+           logf (LOG_FATAL, "Read-full failed in remap.");
            exit(1);
        }
        *bufpp = blockp->data;