chiark / gitweb /
Replace mkostemp+unlink with open(O_TMPFILE)
[elogind.git] / src / shared / util.c
index cdd9a48866b16797e698cd4e594d7534e31f7568..27fc9594cd59baa9d588ef3b630f847ff0bf29ec 100644 (file)
@@ -6108,3 +6108,25 @@ int getpeersec(int fd, char **ret) {
         *ret = s;
         return 0;
 }
+
+int open_tmpfile(const char *path, int flags) {
+        int fd;
+        char *p;
+
+#ifdef O_TMPFILE
+        fd = open(path, flags|O_TMPFILE, S_IRUSR|S_IWUSR);
+        if (fd >= 0)
+                return fd;
+#endif
+        p = strappenda(path, "/systemd-tmp-XXXXXX");
+
+        RUN_WITH_UMASK(0077) {
+                fd = mkostemp(p, O_RDWR|O_CLOEXEC);
+        }
+
+        if (fd < 0)
+                return -errno;
+
+        unlink(p);
+        return fd;
+}