mirror of
https://github.com/falk-werner/webfuse
synced 2025-06-13 12:54:15 +00:00
feature: allow to specify mount options
This commit is contained in:
parent
77ede52c92
commit
9f08154af9
@ -76,6 +76,20 @@ wf_mountpoint_set_userdata(
|
|||||||
void * user_data,
|
void * user_data,
|
||||||
wf_mountpoint_userdata_dispose_fn * dispose);
|
wf_mountpoint_userdata_dispose_fn * dispose);
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/// \brief Adds a mount option.
|
||||||
|
///
|
||||||
|
/// Mount options are passed to libfuse when a filesystem is mounted.
|
||||||
|
/// See libfuse documenation for allowed values.
|
||||||
|
///
|
||||||
|
/// \param mountpoint pointer to the mountpooint
|
||||||
|
/// \param option value of the mount option
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
extern WF_API void
|
||||||
|
wf_mountpoint_add_mountoption(
|
||||||
|
struct wf_mountpoint * mountpoint,
|
||||||
|
char const * option);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -202,6 +202,14 @@ wf_mountpoint_set_userdata(
|
|||||||
wf_impl_mountpoint_set_userdata(mountpoint, user_data, dispose);
|
wf_impl_mountpoint_set_userdata(mountpoint, user_data, dispose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
wf_mountpoint_add_mountoption(
|
||||||
|
struct wf_mountpoint * mountpoint,
|
||||||
|
char const * option)
|
||||||
|
{
|
||||||
|
wf_impl_mountpoint_add_mountoption(mountpoint, option);
|
||||||
|
}
|
||||||
|
|
||||||
// client
|
// client
|
||||||
|
|
||||||
struct wf_client *
|
struct wf_client *
|
||||||
|
@ -47,7 +47,6 @@ static void wf_impl_filesystem_cleanup(
|
|||||||
free(filesystem->user_data.name);
|
free(filesystem->user_data.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool wf_impl_filesystem_init(
|
static bool wf_impl_filesystem_init(
|
||||||
struct wf_impl_filesystem * filesystem,
|
struct wf_impl_filesystem * filesystem,
|
||||||
struct lws * session_wsi,
|
struct lws * session_wsi,
|
||||||
@ -57,9 +56,8 @@ static bool wf_impl_filesystem_init(
|
|||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
char * argv[] = {"", NULL};
|
filesystem->args.argc = mountpoint->options.size;
|
||||||
filesystem->args.argc = 1;
|
filesystem->args.argv = mountpoint->options.items;
|
||||||
filesystem->args.argv = argv;
|
|
||||||
filesystem->args.allocated = 0;
|
filesystem->args.allocated = 0;
|
||||||
|
|
||||||
filesystem->user_data.proxy = proxy;
|
filesystem->user_data.proxy = proxy;
|
||||||
|
@ -3,12 +3,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
struct wf_mountpoint
|
#define WF_MOUNTOPTIONS_INITIAL_CAPACITY 8
|
||||||
{
|
|
||||||
char * path;
|
|
||||||
void * user_data;
|
|
||||||
wf_mountpoint_userdata_dispose_fn * dispose;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct wf_mountpoint *
|
struct wf_mountpoint *
|
||||||
wf_impl_mountpoint_create(
|
wf_impl_mountpoint_create(
|
||||||
@ -18,6 +13,11 @@ wf_impl_mountpoint_create(
|
|||||||
mountpoint->path = strdup(path);
|
mountpoint->path = strdup(path);
|
||||||
mountpoint->user_data = NULL;
|
mountpoint->user_data = NULL;
|
||||||
mountpoint->dispose = NULL;
|
mountpoint->dispose = NULL;
|
||||||
|
mountpoint->options.size = 1;
|
||||||
|
mountpoint->options.capacity = WF_MOUNTOPTIONS_INITIAL_CAPACITY;
|
||||||
|
mountpoint->options.items = malloc(sizeof(char*) * mountpoint->options.capacity);
|
||||||
|
mountpoint->options.items[0] = strdup("");
|
||||||
|
mountpoint->options.items[1] = NULL;
|
||||||
|
|
||||||
return mountpoint;
|
return mountpoint;
|
||||||
}
|
}
|
||||||
@ -31,6 +31,12 @@ wf_impl_mountpoint_dispose(
|
|||||||
mountpoint->dispose(mountpoint->user_data);
|
mountpoint->dispose(mountpoint->user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(size_t i = 0; i < mountpoint->options.size; i++)
|
||||||
|
{
|
||||||
|
free(mountpoint->options.items[i]);
|
||||||
|
}
|
||||||
|
free(mountpoint->options.items);
|
||||||
|
|
||||||
free(mountpoint->path);
|
free(mountpoint->path);
|
||||||
free(mountpoint);
|
free(mountpoint);
|
||||||
}
|
}
|
||||||
@ -51,3 +57,20 @@ wf_impl_mountpoint_set_userdata(
|
|||||||
mountpoint->user_data = user_data;
|
mountpoint->user_data = user_data;
|
||||||
mountpoint->dispose = dispose;
|
mountpoint->dispose = dispose;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
wf_impl_mountpoint_add_mountoption(
|
||||||
|
struct wf_mountpoint * mountpoint,
|
||||||
|
char const * option)
|
||||||
|
{
|
||||||
|
if ((mountpoint->options.size + 1) >= mountpoint->options.capacity)
|
||||||
|
{
|
||||||
|
mountpoint->options.capacity *= 2;
|
||||||
|
mountpoint->options.items = realloc(mountpoint->options.items,
|
||||||
|
sizeof(char*) * mountpoint->options.capacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
mountpoint->options.items[mountpoint->options.size] = strdup(option);
|
||||||
|
mountpoint->options.items[mountpoint->options.size + 1] = NULL;
|
||||||
|
mountpoint->options.size++;
|
||||||
|
}
|
||||||
|
@ -3,11 +3,32 @@
|
|||||||
|
|
||||||
#include "webfuse/mountpoint.h"
|
#include "webfuse/mountpoint.h"
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#include <stddef.h>
|
||||||
|
#else
|
||||||
|
#include <cstddef>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct wf_mountoptions
|
||||||
|
{
|
||||||
|
char * * items;
|
||||||
|
size_t size;
|
||||||
|
size_t capacity;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wf_mountpoint
|
||||||
|
{
|
||||||
|
char * path;
|
||||||
|
void * user_data;
|
||||||
|
wf_mountpoint_userdata_dispose_fn * dispose;
|
||||||
|
struct wf_mountoptions options;
|
||||||
|
};
|
||||||
|
|
||||||
extern struct wf_mountpoint *
|
extern struct wf_mountpoint *
|
||||||
wf_impl_mountpoint_create(
|
wf_impl_mountpoint_create(
|
||||||
char const * path);
|
char const * path);
|
||||||
@ -26,6 +47,11 @@ wf_impl_mountpoint_set_userdata(
|
|||||||
void * user_data,
|
void * user_data,
|
||||||
wf_mountpoint_userdata_dispose_fn * dispose);
|
wf_mountpoint_userdata_dispose_fn * dispose);
|
||||||
|
|
||||||
|
extern void
|
||||||
|
wf_impl_mountpoint_add_mountoption(
|
||||||
|
struct wf_mountpoint * mountpoint,
|
||||||
|
char const * option);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user