5465ec7
Index: src/tools/hunspell.cxx
5465ec7
===================================================================
5465ec7
RCS file: /cvsroot/hunspell/hunspell/src/tools/hunspell.cxx,v
5465ec7
retrieving revision 1.28
5465ec7
diff -u -r1.28 hunspell.cxx
5465ec7
--- src/tools/hunspell.cxx	21 Jan 2011 17:30:41 -0000	1.28
5465ec7
+++ src/tools/hunspell.cxx	6 Dec 2011 22:44:15 -0000
5465ec7
@@ -128,8 +128,6 @@
5465ec7
 #define readline scanline
5465ec7
 #endif
5465ec7
 
5465ec7
-#define TEMPNAME "hunSPELL.bak"
5465ec7
-
5465ec7
 extern char * mystrdup(const char * s);
5465ec7
 
5465ec7
 // file formats:
5465ec7
@@ -1316,14 +1314,12 @@
5465ec7
     char * extension = basename(filename, '.');
5465ec7
     parser = get_parser(format, extension, pMS[0]);
5465ec7
 
5465ec7
-    char * tempname = (char *) malloc(strlen(filename) + strlen(TEMPNAME) + 1);
5465ec7
-    strcpy(tempname, filename);
5465ec7
-    strcpy(basename(tempname, DIRSEPCH), TEMPNAME);
5465ec7
-    
5465ec7
-    FILE *tempfile;
5465ec7
+   
5465ec7
+    FILE *tempfile = tmpfile();
5465ec7
 
5465ec7
-    if (!(tempfile = fopen(tempname, "w"))) {
5465ec7
-        fprintf(stderr, gettext("Can't create tempfile %s.\n"), tempname);
5465ec7
+    if (!tempfile)
5465ec7
+    {
5465ec7
+        perror(gettext("Can't create tempfile"));
5465ec7
         endwin();
5465ec7
         exit(1);
5465ec7
     }
5465ec7
@@ -1337,7 +1333,7 @@
5465ec7
 		    case -1: {
5465ec7
 			clear();
5465ec7
 			refresh();
5465ec7
-			unlink(tempname);
5465ec7
+			fclose(tempfile); //automatically deleted when closed
5465ec7
 			endwin();
5465ec7
 			exit(0);
5465ec7
 		    }
5465ec7
@@ -1350,15 +1346,22 @@
5465ec7
 	    }
5465ec7
 	}
5465ec7
 	fclose(text);
5465ec7
-	fclose(tempfile);
5465ec7
 	delete parser;
5465ec7
 
5465ec7
-	if (! modified) {
5465ec7
-	    unlink(tempname);
5465ec7
-	} else {
5465ec7
-            rename(tempname, filename);
5465ec7
+	if (modified) {
5465ec7
+		rewind(tempfile);
5465ec7
+		text = fopen(filename, "wb");
5465ec7
+
5465ec7
+		size_t n;
5465ec7
+		while ((n = fread(buf, 1, MAXLNLEN, tempfile)) > 0)
5465ec7
+		{
5465ec7
+			if (fwrite(buf, 1, n, text) != n)
5465ec7
+				perror("write failed");
5465ec7
+		}
5465ec7
+
5465ec7
+		fclose(text);
5465ec7
 	}
5465ec7
-        free(tempname);
5465ec7
+	fclose(tempfile); //automatically deleted when closed
5465ec7
 }
5465ec7
 
5465ec7
 #endif