From 59f7c11de7eb67def76e24b8f98c2db66d5518f2 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Sat, 17 Jul 2021 23:13:27 +0100 Subject: [PATCH] blockd: create mountpoint parent folder if needed Signed-off-by: Daniel Golle --- blockd.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/blockd.c b/blockd.c index 58b33e3..9bb8ab2 100644 --- a/blockd.c +++ b/blockd.c @@ -209,7 +209,7 @@ static void device_mount_remove(struct ubus_context *ctx, struct device *device) static void device_mount_add(struct ubus_context *ctx, struct device *device) { struct stat st; - char *path; + char *path, *tmp; if (asprintf(&path, "/tmp/run/blockd/%s", device->name) == -1) exit(ENOMEM); @@ -220,6 +220,14 @@ static void device_mount_add(struct ubus_context *ctx, struct device *device) else if (S_ISDIR(st.st_mode)) rmdir(device->target); } + + tmp = strrchr(device->target, '/'); + if (tmp && tmp != device->target && tmp != &device->target[strlen(path)-1]) { + *tmp = '\0'; + mkdir_p(device->target, 0755); + *tmp = '/'; + } + if (symlink(path, device->target)) ULOG_ERR("failed to symlink %s->%s (%d) - %m\n", device->target, path, errno); else -- 2.30.2