1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
$NetBSD: patch-ae,v 1.1 2003/01/24 14:12:04 itohy Exp $
--- wdiff.c.orig Sun Nov 6 16:57:23 1994
+++ wdiff.c Fri Jan 24 22:41:01 2003
@@ -168,6 +168,10 @@
# define L_tmpnam PATH_MAX
#endif
+#ifdef HAVE_MKSTEMP
+# define MKSTEMP_TEMPLATE "/tmp/wdiffXXXXXXXX"
+#endif
+
typedef struct side SIDE; /* all variables for one side */
struct side
{
@@ -555,6 +559,9 @@
split_file_into_words (SIDE *side)
{
struct stat stat_buffer; /* for checking if file is directory */
+#ifdef HAVE_MKSTEMP
+ int fd;
+#endif
/* Open files. */
@@ -566,10 +573,23 @@
this temporary local file. Once done, prepare it for reading.
We do not need the file name itself anymore. */
+#ifdef HAVE_MKSTEMP
+ strcpy (side->temp_name, MKSTEMP_TEMPLATE);
+ if ((fd = mkstemp(side->temp_name)) < 0)
+ error (EXIT_OTHER_REASON, 0, "mkstemp failed");
+ side->file = fdopen (fd, "w+");
+ if (side->file == NULL)
+ {
+ int e = errno;
+ (void) unlink (side->temp_name);
+ error (EXIT_OTHER_REASON, e, side->temp_name);
+ }
+#else
tmpnam (side->temp_name);
side->file = fopen (side->temp_name, "w+");
if (side->file == NULL)
error (EXIT_OTHER_REASON, errno, side->temp_name);
+#endif
if (unlink (side->temp_name) != 0)
error (EXIT_OTHER_REASON, errno, side->temp_name);
while (side->character = getchar (), side->character != EOF)
@@ -593,10 +613,23 @@
side->character = getc (side->file);
side->position = 0;
+#ifdef HAVE_MKSTEMP
+ strcpy (side->temp_name, MKSTEMP_TEMPLATE);
+ if ((fd = mkstemp(side->temp_name)) < 0)
+ error (EXIT_OTHER_REASON, 0, "mkstemp failed");
+ side->temp_file = fdopen (fd, "w");
+ if (side->temp_file == NULL)
+ {
+ int e = errno;
+ (void) unlink (side->temp_name);
+ error (EXIT_OTHER_REASON, e, side->temp_name);
+ }
+#else
tmpnam (side->temp_name);
side->temp_file = fopen (side->temp_name, "w");
if (side->temp_file == NULL)
error (EXIT_OTHER_REASON, errno, side->temp_name);
+#endif
/* Complete splitting input file into words on output. */
@@ -1135,7 +1168,7 @@
| Main program. |
`---------------*/
-void
+int
main (int argc, char *const argv[])
{
int option_char; /* option character */
@@ -1329,5 +1362,5 @@
|| count_changed_left || count_changed_right)
exit (EXIT_ANY_DIFFERENCE);
- exit (EXIT_NO_DIFFERENCES);
+ return EXIT_NO_DIFFERENCES;
}
|