Use the new-in-3.11 O_TMPFILE flag when available.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 8 Sep 2013 16:47:41 +0000 (18:47 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 8 Sep 2013 16:47:41 +0000 (18:47 +0200)
Also, we don't need to mess around with umask in the fallback case,
since 0600 is default for mkstemp() anyway.

util.cpp

index 25a8da4..dadeb37 100644 (file)
--- a/util.cpp
+++ b/util.cpp
@@ -2,28 +2,35 @@
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <fcntl.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
 #include "log.h"
 #include "util.h"
 
+#ifndef O_TMPFILE
+#define __O_TMPFILE 020000000
+#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
+#endif
+
 using namespace std;
 
 int make_tempfile(const std::string &contents)
 {
        char filename[] = "/tmp/cubemap.XXXXXX";
-       mode_t old_umask = umask(077);
-       int fd = mkstemp(filename);
-       umask(old_umask);
+       int fd = open(filename, O_RDWR | O_TMPFILE, 0600);
        if (fd == -1) {
-               log_perror("mkstemp");
-               return -1;
-       }
+               fd = mkstemp(filename);
+               if (fd == -1) {
+                       log_perror("mkstemp");
+                       return -1;
+               }
 
-       if (unlink(filename) == -1) {
-               log_perror("unlink");
-               // Can still continue;
+               if (unlink(filename) == -1) {
+                       log_perror("unlink");
+                       // Can still continue.
+               }
        }
 
        const char *ptr = contents.data();