From 50ccd8645379e2c36f6437f6ef6ddb4d49e59342 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 24 Apr 2019 18:42:13 +0200 Subject: [PATCH] fileio: add new WRITE_STRING_FILE_MKDIR_0755 flag for mkdir'ing parent --- src/basic/fileio.c | 7 +++++++ src/basic/fileio.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 16034fb9e8..4c18212668 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -21,6 +21,7 @@ #include "log.h" #include "macro.h" #include "missing.h" +#include "mkdir.h" #include "parse-util.h" #include "path-util.h" #include "stdio-util.h" @@ -174,6 +175,12 @@ int write_string_file_ts( /* We don't know how to verify whether the file contents was already on-disk. */ assert(!((flags & WRITE_STRING_FILE_VERIFY_ON_FAILURE) && (flags & WRITE_STRING_FILE_SYNC))); + if (flags & WRITE_STRING_FILE_MKDIR_0755) { + r = mkdir_parents(fn, 0755); + if (r < 0) + return r; + } + if (flags & WRITE_STRING_FILE_ATOMIC) { assert(flags & WRITE_STRING_FILE_CREATE); diff --git a/src/basic/fileio.h b/src/basic/fileio.h index eb551c7ac1..05f6c89da0 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -21,6 +21,7 @@ typedef enum { WRITE_STRING_FILE_SYNC = 1 << 4, WRITE_STRING_FILE_DISABLE_BUFFER = 1 << 5, WRITE_STRING_FILE_NOFOLLOW = 1 << 6, + WRITE_STRING_FILE_MKDIR_0755 = 1 << 7, /* And before you wonder, why write_string_file_atomic_label_ts() is a separate function instead of just one more flag here: it's about linking: we don't want to pull -lselinux into all users of write_string_file()