From 660e5ca7be52ca497bb10dd128fc37baebe9c4e8 Mon Sep 17 00:00:00 2001 From: Falk Werner Date: Mon, 11 Mar 2019 23:21:49 +0100 Subject: [PATCH] feature: try to create mount point, if not present --- lib/wsfs/adapter/server.c | 57 +++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/lib/wsfs/adapter/server.c b/lib/wsfs/adapter/server.c index 31da29d..cb1beec 100644 --- a/lib/wsfs/adapter/server.c +++ b/lib/wsfs/adapter/server.c @@ -4,6 +4,10 @@ #include #include +#include +#include +#include + #include "wsfs/adapter/server_config_intern.h" #include "wsfs/adapter/server_protocol_intern.h" @@ -74,24 +78,49 @@ static struct lws_context * wsfs_server_context_create( } +static bool wsfs_server_check_mountpoint( + struct wsfs_server_config * config) +{ + bool result = false; + + if (NULL != config->mount_point) + { + struct stat info; + int const rc = stat(config->mount_point, &info); + bool const isDir = ((0 == rc) && (S_ISDIR(info.st_mode))); + + if (!isDir) + { + result = (0 == mkdir(config->mount_point, 0755)); + } + } + + return result; +} + struct wsfs_server * wsfs_server_create( struct wsfs_server_config * config) { - struct wsfs_server * server = malloc(sizeof(struct wsfs_server)); - if (NULL != server) - { - if (wsfs_server_protocol_init(&server->protocol, config->mount_point)) + struct wsfs_server * server = NULL; + + if (wsfs_server_check_mountpoint(config)) + { + server = malloc(sizeof(struct wsfs_server)); + if (NULL != server) { - server->shutdown_requested = false; - wsfs_server_config_clone(config, &server->config); - server->context = wsfs_server_context_create(server); - } - else - { - free(server); - server = NULL; - } - } + if (wsfs_server_protocol_init(&server->protocol, config->mount_point)) + { + server->shutdown_requested = false; + wsfs_server_config_clone(config, &server->config); + server->context = wsfs_server_context_create(server); + } + else + { + free(server); + server = NULL; + } + } + } return server; }