# HG changeset patch # User mas01cr # Date 1195148446 0 # Node ID 1fb3d82aa5901f97a6ef8e1c7735e810e1893971 # Parent 3002bee2f60ddc013a7586b66d620655b9c7b6fc no dataBuf use in dump() diff -r 3002bee2f60d -r 1fb3d82aa590 audioDB.cpp --- 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);