#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(0600);
- 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();