1
0
mirror of https://github.com/falk-werner/webfuse-provider synced 2026-03-02 04:09:18 +00:00

added unit tests for readdir operation (adapter)

This commit is contained in:
Falk Werner
2020-04-04 20:23:50 +02:00
parent 98e02240e9
commit c769c02c55
5 changed files with 331 additions and 25 deletions

View File

@@ -3,6 +3,7 @@
#include "webfuse/adapter/impl/operation/open.h"
#include "webfuse/adapter/impl/operation/close.h"
#include "webfuse/adapter/impl/operation/read.h"
#include "webfuse/adapter/impl/operation/readdir.h"
#include "webfuse/adapter/impl/session.h"
#include "webfuse/adapter/impl/mountpoint.h"

View File

@@ -1,3 +1,4 @@
#include "webfuse/adapter/impl/operation/readdir.h"
#include "webfuse/adapter/impl/operations.h"
#include <stdlib.h>
@@ -15,13 +16,6 @@
#define WF_DIRBUFFER_INITIAL_SIZE 1024
struct wf_impl_operation_readdir_context
{
fuse_req_t request;
size_t size;
off_t offset;
};
struct wf_impl_dirbuffer
{
char * data;
@@ -72,7 +66,7 @@ static size_t wf_impl_min(size_t a, size_t b)
return (a < b) ? a : b;
}
static void wf_impl_operation_readdir_finished(
void wf_impl_operation_readdir_finished(
void * user_data,
json_t const * result,
json_t const * error)
@@ -83,31 +77,40 @@ static void wf_impl_operation_readdir_finished(
struct wf_impl_dirbuffer buffer;
wf_impl_dirbuffer_init(&buffer);
if (NULL != result)
if (json_is_array(result))
{
if (json_is_array(result))
size_t const count = json_array_size(result);
for(size_t i = 0; i < count; i++)
{
bool buffer_full = false;
size_t const count = json_array_size(result);
for(size_t i = 0; (!buffer_full) && (i < count); i++)
json_t * entry =json_array_get(result, i);
if (json_is_object(entry))
{
json_t * entry =json_array_get(result, i);
if (json_is_object(entry))
{
json_t * name_holder = json_object_get(entry, "name");
json_t * inode_holder = json_object_get(entry, "inode");
json_t * name_holder = json_object_get(entry, "name");
json_t * inode_holder = json_object_get(entry, "inode");
if ((NULL != name_holder) && (json_is_string(name_holder)) &&
(NULL != inode_holder) && (json_is_integer(inode_holder)))
{
char const * name = json_string_value(name_holder);
fuse_ino_t entry_inode = (fuse_ino_t) json_integer_value(inode_holder);
wf_impl_dirbuffer_add(context->request, &buffer, name, entry_inode);
}
if ((json_is_string(name_holder)) && (json_is_integer(inode_holder)))
{
char const * name = json_string_value(name_holder);
fuse_ino_t entry_inode = (fuse_ino_t) json_integer_value(inode_holder);
wf_impl_dirbuffer_add(context->request, &buffer, name, entry_inode);
}
else
{
status = WF_BAD_FORMAT;
break;
}
}
else
{
status = WF_BAD_FORMAT;
break;
}
}
}
else if (WF_GOOD == status)
{
status = WF_BAD_FORMAT;
}
if (WF_GOOD == status)
{

View File

@@ -0,0 +1,35 @@
#ifndef WF_ADAPTER_IMPL_OPERATION_READDIR_H
#define WF_ADAPTER_IMPL_OPERATION_READDIR_H
#include "webfuse/adapter/impl/fuse_wrapper.h"
#include <jansson.h>
#ifdef __cplusplus
extern "C"
{
#endif
struct wf_impl_operation_readdir_context
{
fuse_req_t request;
size_t size;
off_t offset;
};
extern void wf_impl_operation_readdir (
fuse_req_t request,
fuse_ino_t inode,
size_t size,
off_t offset,
struct fuse_file_info *file_info);
extern void wf_impl_operation_readdir_finished(
void * user_data,
json_t const * result,
json_t const * error);
#ifdef __cplusplus
}
#endif
#endif