summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>1998-11-23 04:35:26 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>1998-11-23 04:35:26 +0000
commitd75115f56b816578bf8ed8fabe5f282bd659efb7 (patch)
treec108b28d42e47933c14bd4fbff56eb525d5b7d63
parent2281bb5d3be5606adb494b5ec3abba1cf77b478c (diff)
Even better; get rid of tempnam completely in favor of mkstemp)
-rw-r--r--usr.sbin/ctm/ctm/ctm.c32
1 files changed, 13 insertions, 19 deletions
diff --git a/usr.sbin/ctm/ctm/ctm.c b/usr.sbin/ctm/ctm/ctm.c
index cbd20f93857..03269237288 100644
--- a/usr.sbin/ctm/ctm/ctm.c
+++ b/usr.sbin/ctm/ctm/ctm.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: ctm.c,v 1.2 1998/11/22 22:50:51 deraadt Exp $
+ * $Id: ctm.c,v 1.3 1998/11/23 04:35:25 millert Exp $
*
* This is the client program of 'CTM'. It will apply a CTM-patch to a
* collection of files.
@@ -167,31 +167,25 @@ Proc(char *filename, unsigned applied)
/* If we cannot seek, we're doomed, so copy to a tmp-file in that case */
if(!p && -1 == fseek(f,0,SEEK_END)) {
char *fn;
- FILE *f2 = NULL;
- int fd, i;
-
- while (1) {
- fn = tempnam(TmpDir,"CTMclient");
- if (fn == NULL)
- break;
- fd = open(fn, O_CREAT|O_EXCL|O_RDWR);
- if (fd == -1 && errno == EEXIST) {
- free(fn);
- continue;
- }
- if (fd == -1)
- break;
- f2 = fopen(fn,"w+");
- break;
- }
+ FILE *f2;
+ int fd;
- if(!f2) {
+ if (asprintf(&fn, "%s/CTMclient.XXXXXXXX", TmpDir) == -1) {
+ fprintf(stderr, "Cannot allocate memory\n");
+ fclose(f);
+ return Exit_Broke;
+ }
+ if ((fd = mkstemp(fn)) == -1 || (f2 = fdopen(fd, "w+")) == NULL) {
perror(fn);
+ free(fn);
+ if (fd != -1)
+ close(fd);
fclose(f);
return Exit_Broke;
}
unlink(fn);
fprintf(stderr,"Writing tmp-file \"%s\"\n",fn);
+ free(fn);
while(EOF != (i=getc(f)))
if(EOF == putc(i,f2)) {
fclose(f2);