]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tmpfile-util: Introduce mkdtemp_open()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 24 Sep 2022 15:10:40 +0000 (17:10 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 9 Nov 2022 10:13:58 +0000 (11:13 +0100)
src/basic/tmpfile-util.c
src/basic/tmpfile-util.h

index 34d3016ba930f1e58e1ae9de987efba2f2b4f1f7..f3f9062121e29d1e50fffe6ddc875fc08bcbd78e 100644 (file)
@@ -358,3 +358,23 @@ int mkdtemp_malloc(const char *template, char **ret) {
         *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;
+}
index 610cbaf87e76eb4bc55c5f113ea8b8f6edcb7431..96e37cc5783b407faea3d309444c72de1fd47e61 100644 (file)
@@ -19,3 +19,4 @@ int link_tmpfile(int fd, const char *path, const char *target);
 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);