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:
@@ -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"
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
35
lib/webfuse/adapter/impl/operation/readdir.h
Normal file
35
lib/webfuse/adapter/impl/operation/readdir.h
Normal 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
|
||||
Reference in New Issue
Block a user