mirror of
https://github.com/falk-werner/webfuse
synced 2025-06-13 12:54:15 +00:00
adds implementation of static_filesystem_add and add_text
This commit is contained in:
parent
b9e7900f97
commit
ef69187a91
@ -100,3 +100,17 @@ wf_path_get_element(
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char const *
|
||||||
|
wf_path_get_filename(
|
||||||
|
struct wf_path * path)
|
||||||
|
{
|
||||||
|
char const * result = NULL;
|
||||||
|
|
||||||
|
if (0 < path->count)
|
||||||
|
{
|
||||||
|
result = path->elements[path->count - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@ -32,6 +32,10 @@ wf_path_get_element(
|
|||||||
struct wf_path * path,
|
struct wf_path * path,
|
||||||
size_t i);
|
size_t i);
|
||||||
|
|
||||||
|
extern char const *
|
||||||
|
wf_path_get_filename(
|
||||||
|
struct wf_path * path);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,11 +3,14 @@
|
|||||||
#include "webfuse/provider/dirbuffer.h"
|
#include "webfuse/provider/dirbuffer.h"
|
||||||
#include "webfuse/provider/operation/error.h"
|
#include "webfuse/provider/operation/error.h"
|
||||||
|
|
||||||
|
#include "webfuse/core/path.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define WFP_STATIC_FILESYSTEM_DEFAULT_CAPACITY (16)
|
#define WFP_STATIC_FILESYSTEM_DEFAULT_CAPACITY (16)
|
||||||
|
#define WFP_STATIC_FILSYSTEM_INDOE_ROOT (1)
|
||||||
|
|
||||||
struct wfp_static_filesystem_entry
|
struct wfp_static_filesystem_entry
|
||||||
{
|
{
|
||||||
@ -126,13 +129,15 @@ wfp_static_filesystem_entry_get_info(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static size_t
|
||||||
wfp_static_filesystem_add_dir(
|
wfp_static_filesystem_add_dir(
|
||||||
struct wfp_static_filesystem * filesystem,
|
struct wfp_static_filesystem * filesystem,
|
||||||
size_t parent,
|
size_t parent,
|
||||||
char const * name
|
char const * name
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
size_t result = 0;
|
||||||
|
|
||||||
struct wfp_static_filesystem_entry * entry = wfp_static_filesystem_get_entry_by_name(filesystem, parent, name);
|
struct wfp_static_filesystem_entry * entry = wfp_static_filesystem_get_entry_by_name(filesystem, parent, name);
|
||||||
if (NULL == entry)
|
if (NULL == entry)
|
||||||
{
|
{
|
||||||
@ -146,7 +151,31 @@ wfp_static_filesystem_add_dir(
|
|||||||
entry->get_info = &wfp_static_filesystem_entry_get_info;
|
entry->get_info = &wfp_static_filesystem_entry_get_info;
|
||||||
entry->size = 0;
|
entry->size = 0;
|
||||||
entry->content = NULL;
|
entry->content = NULL;
|
||||||
}
|
|
||||||
|
result = entry->inode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
wfp_impl_static_filesystem_make_parent(
|
||||||
|
struct wfp_static_filesystem * filesystem,
|
||||||
|
struct wf_path * path)
|
||||||
|
{
|
||||||
|
size_t result = WFP_STATIC_FILSYSTEM_INDOE_ROOT;
|
||||||
|
|
||||||
|
size_t count = wf_path_element_count(path);
|
||||||
|
if (0 < count)
|
||||||
|
{
|
||||||
|
for(size_t i = 0; i < (count - 1); i++)
|
||||||
|
{
|
||||||
|
char const * name = wf_path_get_element(path, i);
|
||||||
|
result = wfp_static_filesystem_add_dir(filesystem, result, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wfp_static_filesystem_stat(
|
static void wfp_static_filesystem_stat(
|
||||||
@ -320,13 +349,25 @@ wfp_impl_static_filesystem_add(
|
|||||||
char const * content,
|
char const * content,
|
||||||
size_t length)
|
size_t length)
|
||||||
{
|
{
|
||||||
(void) filesystem;
|
struct wf_path * path_ = wf_path_create(path);
|
||||||
(void) path;
|
if (NULL != path_)
|
||||||
(void) mode;
|
{
|
||||||
(void) content;
|
size_t parent = wfp_impl_static_filesystem_make_parent(filesystem, path_);
|
||||||
(void) length;
|
struct wfp_static_filesystem_entry * entry = wfp_static_filesystem_add_entry(filesystem);
|
||||||
|
entry->parent = parent;
|
||||||
|
entry->is_file = true;
|
||||||
|
entry->name = strdup(wf_path_get_filename(path_));
|
||||||
|
entry->mode = mode;
|
||||||
|
entry->size = length;
|
||||||
|
entry->get_info = &wfp_static_filesystem_entry_get_info;
|
||||||
|
entry->read = &wfp_static_filesystem_entry_read;
|
||||||
|
entry->user_data = entry;
|
||||||
|
|
||||||
// ToDo: implement me
|
entry->content = malloc(length);
|
||||||
|
memcpy(entry->content, content, length);
|
||||||
|
|
||||||
|
wf_path_dispose(path_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -336,12 +377,8 @@ wfp_impl_static_filesystem_add_text(
|
|||||||
int mode,
|
int mode,
|
||||||
char const * content)
|
char const * content)
|
||||||
{
|
{
|
||||||
(void) filesystem;
|
size_t length = strlen(content);
|
||||||
(void) path;
|
wfp_impl_static_filesystem_add(filesystem, path, mode, content, length);
|
||||||
(void) mode;
|
|
||||||
(void) content;
|
|
||||||
|
|
||||||
// ToDo: implement me
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -42,3 +42,20 @@ TEST(wfp_static_filesystem, contains_default_dirs)
|
|||||||
wfp_impl_static_filesystem_dispose(filesystem);
|
wfp_impl_static_filesystem_dispose(filesystem);
|
||||||
wfp_client_config_dispose(config);
|
wfp_client_config_dispose(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(wfp_static_filesystem, add_text)
|
||||||
|
{
|
||||||
|
struct wfp_client_config * config = wfp_client_config_create();
|
||||||
|
struct wfp_static_filesystem * filesystem = wfp_impl_static_filesystem_create(config);
|
||||||
|
wfp_impl_static_filesystem_add_text(filesystem, "text.file", 666, "some text");
|
||||||
|
|
||||||
|
MockRequest mock;
|
||||||
|
struct wfp_request * request = request_create(&mock, 23);
|
||||||
|
char const * contained_elements[] = {"text.file", nullptr};
|
||||||
|
EXPECT_CALL(mock, respond(ReaddirMatcher(contained_elements), 23)).Times(1);
|
||||||
|
|
||||||
|
config->provider.readdir(request, 1, config->user_data);
|
||||||
|
|
||||||
|
wfp_impl_static_filesystem_dispose(filesystem);
|
||||||
|
wfp_client_config_dispose(config);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user