Module Name:    xsrc
Committed By:   christos
Date:           Wed Apr 13 22:25:58 UTC 2016

Modified Files:
        xsrc/external/mit/ctwm/dist: session.c

Log Message:
use mkstemp/mktemp


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 xsrc/external/mit/ctwm/dist/session.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/ctwm/dist/session.c
diff -u xsrc/external/mit/ctwm/dist/session.c:1.1 xsrc/external/mit/ctwm/dist/session.c:1.2
--- xsrc/external/mit/ctwm/dist/session.c:1.1	Thu Sep  3 18:16:33 2015
+++ xsrc/external/mit/ctwm/dist/session.c	Wed Apr 13 18:25:57 2016
@@ -840,29 +840,32 @@ int GetWindowConfig (TwmWindow *theWindo
 
 /*===[ Unique Filename Generator ]===========================================*/
 
-static char *unique_filename (char *path, char *prefix)
-/* this function attempts to allocate a temporary filename to store the 
+static FILE *unique_file (char **filename, char *path, char *prefix)
+/* this function attempts to allocate a temporary file to store the 
  * information of the windows
  */
 {
-
-#ifndef X_NOT_POSIX
-    return ((char *) tempnam (path, prefix));
+    int fd;
+    char tmp[PATH_MAX], template[PATH_MAX];
+    FILE *fp;
+
+    snprintf(tmp, sizeof(tmp), "%s/%sXXXXXX", path, prefix);
+#ifndef HAVE_MKSTEMP
+    do {
+        if (fd == -1)
+            strcpy(template, tmp);
+        if ((mktemp(template) == NULL) || (template[0] == '\0'))
+            return NULL;
+        fd = open(template, O_RDWR | O_CREAT | O_EXCL, 0600);
+    } while ((fd == -1) && (errno == EEXIST || errno == EINTR));
 #else
-    char tempFile[PATH_MAX];
-    char *tmp;
-
-    sprintf (tempFile, "%s/%sXXXXXX", path, prefix);
-    tmp = (char *) mktemp (tempFile);
-    if (tmp)
-    {
-	char *ptr = (char *) malloc (strlen (tmp) + 1);
-	strcpy (ptr, tmp);
-	return (ptr);
-    }
-    else
-	return (NULL);
+    if ((fd = mkstemp(tmp)) == -1)
+	return NULL;
 #endif
+    if ((fp = fdopen(fd, "wb")) == NULL)
+	close(fd);
+    *filename = strdup(template);
+    return fp;
 }
 
 /*===[ SAVE WINDOW INFORMATION ]=============================================*/
@@ -942,10 +945,7 @@ void SaveYourselfPhase2CB (SmcConn smcCo
      *        no longer the same since the new format supports
      *        virtaul workspaces.
      *========================================================*/
-    if ((filename = unique_filename (path, ".ctwm")) == NULL)
-	goto bad;
-
-    if (!(configFile = fopen (filename, "wb"))) /* wb = write bytes ? */
+    if ((configFile = unique_file (&filename, path, ".ctwm")) == NULL)
 	goto bad;
 
     if (!write_ushort (configFile, SAVEFILE_VERSION))

Reply via email to