*ret = TAKE_PTR(p);
return 0;
}
+
+int mkdtemp_open(const char *template, int flags, char **ret) {
+ _cleanup_free_ char *p = NULL;
+ int fd, r;
+
+ r = mkdtemp_malloc(template, &p);
+ if (r < 0)
+ return r;
+
+ fd = RET_NERRNO(open(p, O_DIRECTORY|O_CLOEXEC|flags));
+ if (fd < 0) {
+ (void) rmdir(p);
+ return fd;
+ }
+
+ if (ret)
+ *ret = TAKE_PTR(p);
+
+ return fd;
+}
int flink_tmpfile(FILE *f, const char *path, const char *target);
int mkdtemp_malloc(const char *template, char **ret);
+int mkdtemp_open(const char *template, int flags, char **ret);