Mercurial > hg > audiodb
diff audioDB.cpp @ 370:2d5c3f8e8c22
Merge gcc-4.3-cleanups branch (-r629:642, but I consider that branch as
having served its purpose) onto the trunk.
Now compiles cleanly even with a fairly picky gcc. I await version 4.4
with bated breath.
author | mas01cr |
---|---|
date | Wed, 12 Nov 2008 15:40:40 +0000 |
parents | 94c18f128ce8 |
children | 5eb5034b0577 |
line wrap: on
line diff
--- a/audioDB.cpp Wed Nov 12 10:21:06 2008 +0000 +++ b/audioDB.cpp Wed Nov 12 15:40:40 2008 +0000 @@ -22,7 +22,7 @@ return ( (a.trackID==b.trackID) && (a.qpos==b.qpos) && (a.spos==b.spos) ); } -audioDB::audioDB(const unsigned argc, const char *const argv[]): O2_AUDIODB_INITIALIZERS +audioDB::audioDB(const unsigned argc, const char *argv[]): O2_AUDIODB_INITIALIZERS { if(processArgs(argc, argv)<0){ printf("No command found.\n"); @@ -113,7 +113,7 @@ error("Unrecognized command",command); } -audioDB::audioDB(const unsigned argc, const char *const argv[], adb__queryResponse *adbQueryResponse): O2_AUDIODB_INITIALIZERS +audioDB::audioDB(const unsigned argc, const char *argv[], adb__queryResponse *adbQueryResponse): O2_AUDIODB_INITIALIZERS { try { isServer = 1; // Set to make errors report over SOAP @@ -129,7 +129,7 @@ } } -audioDB::audioDB(const unsigned argc, const char* const argv[], adb__statusResponse *adbStatusResponse): O2_AUDIODB_INITIALIZERS +audioDB::audioDB(const unsigned argc, const char *argv[], adb__statusResponse *adbStatusResponse): O2_AUDIODB_INITIALIZERS { try { isServer = 1; // Set to make errors report over SOAP @@ -145,7 +145,7 @@ } } -audioDB::audioDB(const unsigned argc, const char *const argv[], adb__lisztResponse *adbLisztResponse): O2_AUDIODB_INITIALIZERS +audioDB::audioDB(const unsigned argc, const char *argv[], adb__lisztResponse *adbLisztResponse): O2_AUDIODB_INITIALIZERS { try { isServer = 1; // Set to make errors report over SOAP @@ -163,7 +163,7 @@ //for the lib / API -audioDB::audioDB(const unsigned argc, char* const argv[], int * apierror): O2_AUDIODB_INITIALIZERS +audioDB::audioDB(const unsigned argc, const char *argv[], int * apierror): O2_AUDIODB_INITIALIZERS { try { @@ -228,7 +228,7 @@ } //for API status -audioDB::audioDB(const unsigned argc, char* const argv[], cppstatusptr stat, int * apierror): O2_AUDIODB_INITIALIZERS +audioDB::audioDB(const unsigned argc, const char *argv[], cppstatusptr stat, int * apierror): O2_AUDIODB_INITIALIZERS { try { @@ -262,7 +262,7 @@ //for API query -audioDB::audioDB(const unsigned argc, char* const argv[],adb__queryResponse *adbQueryResponse, int * apierror): O2_AUDIODB_INITIALIZERS +audioDB::audioDB(const unsigned argc, const char *argv[],adb__queryResponse *adbQueryResponse, int * apierror): O2_AUDIODB_INITIALIZERS { try { @@ -344,7 +344,7 @@ cleanup(); } -int audioDB::processArgs(const unsigned argc, const char *const argv[]){ +int audioDB::processArgs(const unsigned argc, const char *argv[]){ if(argc<2){ cmdline_parser_print_version (); @@ -526,20 +526,23 @@ return 0; } - if(args_info.INSERT_given){ + if(args_info.INSERT_given) { command=COM_INSERT; dbName=args_info.database_arg; inFile=args_info.features_arg; - if(args_info.key_given) - if(!args_info.features_given) + if(args_info.key_given) { + if(!args_info.features_given) { error("INSERT: '-k key' argument depends on '-f features'"); - else + } else { key=args_info.key_arg; - if(args_info.times_given){ + } + } + if(args_info.times_given) { timesFileName=args_info.times_arg; - if(strlen(timesFileName)>0){ - if(!(timesFile = new std::ifstream(timesFileName,std::ios::in))) + if(strlen(timesFileName)>0) { + if(!(timesFile = new std::ifstream(timesFileName,std::ios::in))) { error("Could not open times file for reading", timesFileName); + } usingTimes=1; } } @@ -555,16 +558,17 @@ return 0; } - if(args_info.BATCHINSERT_given){ + if(args_info.BATCHINSERT_given) { command=COM_BATCHINSERT; dbName=args_info.database_arg; inFile=args_info.featureList_arg; - if(args_info.keyList_given) - if(!args_info.featureList_given) + if(args_info.keyList_given) { + if(!args_info.featureList_given) { error("BATCHINSERT: '-K keyList' argument depends on '-F featureList'"); - else + } else { key=args_info.keyList_arg; // INCONSISTENT NO CHECK - + } + } /* TO DO: REPLACE WITH if(args_info.keyList_given){ trackFileName=args_info.keyList_arg; @@ -574,17 +578,17 @@ AND UPDATE BATCHINSERT() */ - if(args_info.timesList_given){ + if(args_info.timesList_given) { timesFileName=args_info.timesList_arg; - if(strlen(timesFileName)>0){ + if(strlen(timesFileName)>0) { if(!(timesFile = new std::ifstream(timesFileName,std::ios::in))) error("Could not open timesList file for reading", timesFileName); usingTimes=1; } } - if(args_info.powerList_given){ + if(args_info.powerList_given) { powerFileName=args_info.powerList_arg; - if(strlen(powerFileName)>0){ + if(strlen(powerFileName)>0) { if(!(powerFile = new std::ifstream(powerFileName,std::ios::in))) error("Could not open powerList file for reading", powerFileName); usingPower=1; @@ -645,7 +649,7 @@ command=COM_QUERY; dbName=args_info.database_arg; // XOR features and key search - if(!args_info.features_given && !args_info.key_given || (args_info.features_given && args_info.key_given)) + if((!args_info.features_given && !args_info.key_given) || (args_info.features_given && args_info.key_given)) error("QUERY requires exactly one of either -f features or -k key"); if(args_info.features_given) inFile=args_info.features_arg; // query from file @@ -887,7 +891,7 @@ // This entry point is visited once per instance // so it is a good place to set any global state variables -int main(const unsigned argc, char* const argv[]){ +int main(const int argc, const char* argv[]){ SERVER_LSH_INDEX_SINGLETON = 0; // Initialize global variables SERVER_ADB_ROOT = 0; // Server-side database root prefix SERVER_ADB_FEATURE_ROOT = 0; // Server-side features root prefix @@ -906,7 +910,7 @@ //adb_ptr audiodb_create(char * path,long ntracks, long datadim) { adb_ptr audiodb_create(char * path,long datasize,long ntracks, long datadim) { - char *argv[12]; + const char *argv[12]; int argvctr=0; char tempstr1[200]; char tempstr2[200]; @@ -952,7 +956,7 @@ int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins) { - char *argv[15]; + const char *argv[15]; int argvctr=0; int apierror=0; @@ -986,18 +990,17 @@ int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size) { - char *argv[22]; + const char *argv[22]; int argvctr=0; unsigned int i=0; - int retval=0; char tempfeaturename[]="tempfeatureXXXXXX"; char temppowername[]="temppowerXXXXXX"; char tempkeyname[]="tempkeyXXXXXX"; char temptimesname[]="temptimesXXXXXX"; - int tempfeaturefd=0; - int temppowerfd=0; - int tempkeyfd=0; - int temptimesfd=0; + int tempfeaturefd = -1; + int temppowerfd = -1; + int tempkeyfd = -1; + int temptimesfd = -1; int flags[4]={0}; int apierror=0; @@ -1025,77 +1028,43 @@ /* make four temp files */ - tempfeaturefd=mkstemp(tempfeaturename); - if (tempfeaturefd !=-1){ + if ((tempfeaturefd = mkstemp(tempfeaturename)) == -1) + goto error; + if ((temppowerfd = mkstemp(temppowername)) == -1) + goto error; + if ((tempkeyfd=mkstemp(tempkeyname)) == -1) + goto error; + if ((temptimesfd=mkstemp(temptimesname)) == -1) + goto error; - temppowerfd=mkstemp(temppowername); - if (temppowerfd !=-1){ - - tempkeyfd=mkstemp(tempkeyname); - if (tempkeyfd !=-1){ - - temptimesfd=mkstemp(temptimesname); - if (temptimesfd !=-1){ - - } else { - retval=-1; - close(tempkeyfd); - remove(tempkeyname); - close(temppowerfd); - remove(temppowername); - close(tempfeaturefd); - remove(tempfeaturename); - } - - } else { - retval=-1; - close(temppowerfd); - remove(temppowername); - close(tempfeaturefd); - remove(tempfeaturename); - } - - } else { - retval=-1; - close(tempfeaturefd); - remove(tempfeaturename); - } - - } else { - retval=-1; - } - - - - - - if (retval == -1){ - return -1; - } - /* Ok, so we should have a working set of files to write to */ /* I'm going to assume that the same format is kept for all structs in the array */ /* That is, each struct should be correctly formed, and contain at least a features file, because I'm just going to pass the terms along to the text files */ - for (i=0; i<size; i++){ + for (i = 0; i < size; i++) { + if (write(tempfeaturefd,ins[i].features,strlen(ins[i].features)) != (ssize_t) strlen(ins[i].features)) + goto error; + if (write(tempfeaturefd,"\n",1) != 1) + goto error; - write(tempfeaturefd,ins[i].features,strlen(ins[i].features)); - write(tempfeaturefd,"\n",1); - - if (flags[1]){ - write(temppowerfd,ins[i].power,strlen(ins[i].power)); - write(temppowerfd,"\n",1); - } - - if (flags[2]){ - write(tempkeyfd,ins[i].key,strlen(ins[i].key)); - write(tempkeyfd,"\n",1); - } - - if (flags[3]){ - write(temptimesfd,ins[i].times,strlen(ins[i].times)); - write(temptimesfd,"\n",1); - } - } + if (flags[1]) { + if (write(temppowerfd,ins[i].power,strlen(ins[i].power)) != (ssize_t) strlen(ins[i].power)) + goto error; + if (write(temppowerfd,"\n",1) != 1) + goto error; + } + if (flags[2]) { + if (write(tempkeyfd,ins[i].key,strlen(ins[i].key)) != (ssize_t) strlen(ins[i].key)) + goto error; + if (write(tempkeyfd,"\n",1) != 1) + goto error; + } + if (flags[3]) { + if (write(temptimesfd,ins[i].times,strlen(ins[i].times)) != (ssize_t) strlen(ins[i].times)) + goto error; + if (write(temptimesfd,"\n",1) != 1) + goto error; + } + } argv[argvctr++]="-F"; argv[argvctr++]=tempfeaturename; @@ -1130,12 +1099,31 @@ return apierror; + + error: + if(tempfeaturefd != -1) { + close(tempfeaturefd); + remove(tempfeaturename); + } + if(temppowerfd != -1) { + close(temppowerfd); + remove(temppowername); + } + if(tempkeyfd != -1) { + close(tempkeyfd); + remove(tempkeyname); + } + if(temptimesfd != -1) { + close(temptimesfd); + remove(temptimesname); + } + return -1; } int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqr){ - char *argv[32]; + const char *argv[32]; int argvctr=0; char tempstr1[200]; char tempstr2[200]; @@ -1248,7 +1236,7 @@ cppstatus sss; int apierror=0; - char * argv[5]; + const char *argv[5]; apierror=0; argv[0]="audioDB"; @@ -1273,9 +1261,9 @@ return audiodb_dump_withdir(mydb,"audioDB.dump"); } - int audiodb_dump_withdir(adb_ptr mydb, char * outputdir){ + int audiodb_dump_withdir(adb_ptr mydb, const char *outputdir){ - char * argv[7]; + const char *argv[7]; int argvctr=0; int apierror=0; @@ -1285,7 +1273,7 @@ argv[argvctr++]=mydb->dbname; argv[argvctr++]="--output"; argv[argvctr++]=(char *)outputdir; - argv[argvctr+1]='\0'; + argv[argvctr]='\0'; audioDB::audioDB(6,argv,&apierror); @@ -1294,7 +1282,7 @@ int audiodb_l2norm(adb_ptr mydb){ - char * argv[5]; + const char *argv[5]; int apierror=0; argv[0]="audioDB"; @@ -1309,7 +1297,7 @@ int audiodb_power(adb_ptr mydb){ - char * argv[5]; + const char *argv[5]; int apierror=0; argv[0]="audioDB";