annotate liszt.cpp @ 507:e7fd50483311

Free bits of the datum constructed in audioDB::query. We're not quite safe: error calls between allocation of some of these bits and pieces and their use will cause failure... but not freeing things here is definitely wrong.
author mas01cr
date Tue, 13 Jan 2009 21:37:10 +0000
parents 342822c2d49a
children e18843dc0aea
rev   line source
mas01cr@498 1 #include "audioDB.h"
mas01cr@498 2
mas01cr@498 3 void audioDB::liszt(const char* dbName, unsigned offset, unsigned numLines, adb__lisztResponse* adbLisztResponse){
mas01cr@498 4 if(!dbH) {
mas01cr@498 5 initTables(dbName, 0);
mas01cr@498 6 }
mas01cr@498 7
mas01cr@498 8 assert(trackTable && fileTable);
mas01cr@498 9
mas01cr@498 10 if(offset>dbH->numFiles){
mas01cr@498 11 char tmpStr[MAXSTR];
mas01cr@498 12 sprintf(tmpStr, "numFiles=%u, lisztOffset=%u", dbH->numFiles, offset);
mas01cr@498 13 error("listKeys offset out of range", tmpStr);
mas01cr@498 14 }
mas01cr@498 15
mas01cr@498 16 if(!adbLisztResponse){
mas01cr@498 17 for(Uns32T k=0; k<numLines && offset+k<dbH->numFiles; k++){
mas01cr@498 18 fprintf(stdout, "[%d] %s (%d)\n", offset+k, fileTable+(offset+k)*O2_FILETABLE_ENTRY_SIZE, trackTable[offset+k]);
mas01cr@498 19 }
mas01cr@498 20 }
mas01cr@498 21 else{
mas01cr@498 22 adbLisztResponse->result.Rkey = new char*[numLines];
mas01cr@498 23 adbLisztResponse->result.Rlen = new unsigned int[numLines];
mas01cr@498 24 Uns32T k = 0;
mas01cr@498 25 for( ; k<numLines && offset+k<dbH->numFiles; k++){
mas01cr@498 26 adbLisztResponse->result.Rkey[k] = new char[MAXSTR];
mas01cr@498 27 snprintf(adbLisztResponse->result.Rkey[k], O2_MAXFILESTR, "%s", fileTable+(offset+k)*O2_FILETABLE_ENTRY_SIZE);
mas01cr@498 28 adbLisztResponse->result.Rlen[k] = trackTable[offset+k];
mas01cr@498 29 }
mas01cr@498 30 adbLisztResponse->result.__sizeRkey = k;
mas01cr@498 31 adbLisztResponse->result.__sizeRlen = k;
mas01cr@498 32 }
mas01cr@498 33
mas01cr@498 34 }