Mercurial > hg > audiodb
changeset 367:3b6cd1dfbddb gcc-4.3-cleanups
deal with the write() calls in implementation of the API, too.
(Can't use CHECKED_WRITE() because audioDB::error() is out of scope, so
we have to do it the old-fashioned way.)
author | mas01cr |
---|---|
date | Wed, 12 Nov 2008 15:23:30 +0000 |
parents | 521812d63516 |
children | 6fd52a9a1490 |
files | audioDB.cpp |
diffstat | 1 files changed, 55 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.cpp Wed Nov 12 15:23:29 2008 +0000 +++ b/audioDB.cpp Wed Nov 12 15:23:30 2008 +0000 @@ -993,15 +993,14 @@ 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; @@ -1029,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; @@ -1134,6 +1099,25 @@ 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; }