diff open.cpp @ 592:cfa74bcc1249

Remove uses of mmap() from open.cpp (These are relatively easy to deal with; just replace them with an lseek()/read() pair. Of course, now we're destructively modifying the fd position; I'd have liked to use pread() but, surprise, that's not available on mingw.)
author mas01cr
date Tue, 11 Aug 2009 21:42:29 +0000
parents cc2b97d020b1
children 6ad0a6e67d4c
line wrap: on
line diff
--- a/open.cpp	Tue Aug 11 21:42:24 2009 +0000
+++ b/open.cpp	Tue Aug 11 21:42:29 2009 +0000
@@ -28,18 +28,25 @@
   if(adb->header->length > 0) {
     unsigned nfiles = adb->header->numFiles;
     key_table_length = align_page_up(nfiles * ADB_FILETABLE_ENTRY_SIZE);
-    mmap_or_goto_error(char *, key_table, adb->header->fileTableOffset, key_table_length);
+    key_table = (char *)malloc(key_table_length);
+    if(!key_table) {
+      goto error;
+    }
+    lseek_set_or_goto_error(adb->fd, adb->header->fileTableOffset);
+    read_or_goto_error(adb->fd, key_table, key_table_length);
     for (unsigned int k = 0; k < nfiles; k++) {
       adb->keys->push_back(key_table + k*ADB_FILETABLE_ENTRY_SIZE);
       (*adb->keymap)[(key_table + k*ADB_FILETABLE_ENTRY_SIZE)] = k;
     }
-    munmap(key_table, key_table_length);
+    free(key_table);
   }
 
   return 0;
 
  error:
-  maybe_munmap(key_table, key_table_length);
+  if(key_table) {
+    free(key_table);
+  }
   return 1;
 }
 
@@ -49,7 +56,12 @@
   if(adb->header->length > 0) {
     unsigned nfiles = adb->header->numFiles;
     track_table_length = align_page_up(nfiles * ADB_TRACKTABLE_ENTRY_SIZE);
-    mmap_or_goto_error(uint32_t *, track_table, adb->header->trackTableOffset, track_table_length);
+    track_table = (uint32_t *) malloc(track_table_length);
+    if (!track_table) {
+      goto error;
+    }
+    lseek_set_or_goto_error(adb->fd, adb->header->trackTableOffset);
+    read_or_goto_error(adb->fd, track_table, track_table_length);
     off_t offset = 0;
     for (unsigned int k = 0; k < nfiles; k++) {
       uint32_t track_length = track_table[k];
@@ -57,13 +69,15 @@
       adb->track_offsets->push_back(offset);
       offset += track_length * adb->header->dim * sizeof(double);
     }
-    munmap(track_table, track_table_length);
+    free(track_table);
   }
 
   return 0;
 
  error:
-  maybe_munmap(track_table, track_table_length);
+  if(track_table) {
+    free(track_table);
+  }
   return 1;
 }