Trivial
[idzebra-moved-to-github.git] / bfile / mfile.c
index 2633f05..5f0dd22 100644 (file)
@@ -4,7 +4,13 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: mfile.c,v $
- * Revision 1.1  1994-08-23 14:41:33  quinn
+ * Revision 1.3  1994-08-24 09:37:17  quinn
+ * Changed reaction to read return values.
+ *
+ * Revision 1.2  1994/08/23  14:50:48  quinn
+ * Fixed mf_close().
+ *
+ * Revision 1.1  1994/08/23  14:41:33  quinn
  * First functional version.
  *
  */
@@ -248,10 +254,15 @@ MFile mf_open(MFile_area ma, const char *name, int block_size, int wflag)
        new->files[0].path = xstrdup(tmp);
        new->ma = ma;
     }
+    else
+    {
+       assert(!new->open);
+    }
     new->blocksize = block_size;
     new->min_bytes_creat = MF_MIN_BLOCKS_CREAT * block_size;
     new->wr=wflag;
     new->cur_file = 0;
+    new->open = 1;
 
     for (i = 0; i < new->no_files; i++)
     {
@@ -270,7 +281,13 @@ MFile mf_open(MFile_area ma, const char *name, int block_size, int wflag)
  */
 int mf_close(MFile mf)
 {
-    abort();
+    int i;
+
+    assert(mf->open);
+    for (i = 0; i < mf->no_files; i++)
+       if (mf->files[i].fd >= 0)
+           close(mf->files[i].fd);
+    mf->open = 0;
     return 0;
 }
 
@@ -279,14 +296,19 @@ int mf_close(MFile mf)
  */
 int mf_read(MFile mf, int no, int offset, int num, void *buf)
 {
+    int rd;
+
     if (file_position(mf, no) < 0)
        exit(1);
-    if (read(mf->files[mf->cur_file].fd, buf, mf->blocksize) < mf->blocksize)
+    if ((rd = read(mf->files[mf->cur_file].fd, buf, mf->blocksize)) < 0)
     {
        log(LOG_FATAL|LOG_ERRNO, "Read failed");
        exit(1);
     }
-    return 0;
+    else if (rd < mf->blocksize)
+       return 0;
+    else
+       return 1;
 }
 
 /*