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;
   }