Mercurial > hg > mlmmj
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; }