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