Mercurial > hg > audiodb
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; }