Mercurial > hg > audiodb
changeset 184:1fb3d82aa590 no-big-mmap
no dataBuf use in dump()
author | mas01cr |
---|---|
date | Thu, 15 Nov 2007 17:40:46 +0000 |
parents | 3002bee2f60d |
children | ae212368a874 |
files | audioDB.cpp |
diffstat | 1 files changed, 24 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.cpp Thu Nov 15 17:14:04 2007 +0000 +++ b/audioDB.cpp Thu Nov 15 17:40:46 2007 +0000 @@ -939,6 +939,9 @@ int ffd; FILE *tFile; unsigned pos = 0; + lseek(dbfid, dbH->dataOffset, SEEK_SET); + double *data_buffer; + size_t data_buffer_size; for(unsigned k = 0; k < dbH->numFiles; k++) { fprintf(kLFile, "%s\n", fileTable + k*O2_FILETABLESIZE); snprintf(fName, 256, "%05d.features", k); @@ -948,10 +951,29 @@ if ((write(ffd, &dbH->dim, sizeof(uint32_t))) < 0) { error("error writing dimensions", fName, "write"); } - - if ((write(ffd, dataBuf + pos * dbH->dim, trackTable[k] * dbH->dim * sizeof(double))) < 0) { + + /* FIXME: this repeated malloc()/free() of data buffers is + inefficient. */ + data_buffer_size = trackTable[k] * dbH->dim * sizeof(double); + + { + void *tmp = malloc(data_buffer_size); + if (tmp == NULL) { + error("error allocating data buffer"); + } + data_buffer = (double *) tmp; + } + + if ((read(dbfid, data_buffer, data_buffer_size)) != (ssize_t) data_buffer_size) { + error("error reading data", fName, "read"); + } + + if ((write(ffd, data_buffer, data_buffer_size)) < 0) { error("error writing data", fName, "write"); } + + free(data_buffer); + fprintf(fLFile, "%s\n", fName); close(ffd);