changeset 278:45501498e5a8

Another EEXIST check and some myfree's added
author mmj
date Fri, 25 Jun 2004 17:40:33 +1000
parents a18debdfdcc1
children 118a412fcebd
files src/prepstdreply.c
diffstat 1 files changed, 15 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/prepstdreply.c	Fri Jun 25 17:34:18 2004 +1000
+++ b/src/prepstdreply.c	Fri Jun 25 17:40:33 2004 +1000
@@ -43,7 +43,7 @@
 {
 	int infd, outfd;
 	size_t i;
-	char *str, *tmp, *retstr;
+	char *str, *tmp, *retstr = NULL;
 
 	tmp = concatstr(3, listdir, "/text/", filename);
 	infd = open(tmp, O_RDONLY);
@@ -63,17 +63,26 @@
 		
 	myfree(tmp);
 
+	do {
 	tmp = random_str();
+		myfree(retstr);
 	retstr = concatstr(3, listdir, "/queue/", tmp);
 	myfree(tmp);
-	outfd = open(retstr, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
+
+                outfd = open(filename, O_RDWR|O_CREAT|O_EXCL,
+				       S_IRUSR|S_IWUSR);
+
+	} while ((outfd < 0) && (errno == EEXIST));
+	
 	if(outfd < 0) {
 		log_error(LOG_ARGS, "Could not open std mail %s", tmp);
+		myfree(str);
 		return NULL;
 	}
 
 	if(writen(outfd, str, strlen(str)) < 0) {
 		log_error(LOG_ARGS, "Could not write std mail");
+		myfree(str);
 		return NULL;
 	}
 	myfree(str);
@@ -86,6 +95,7 @@
 			}
 		}
 		if(writen(outfd, str, strlen(str)) < 0) {
+			myfree(str);
 			log_error(LOG_ARGS, "Could not write std mail");
 			return NULL;
 		}