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

refactor: encapsulate json writer

This commit is contained in:
Falk Werner
2020-07-08 21:29:18 +02:00
parent b5f1253738
commit 792f805909
11 changed files with 258 additions and 73 deletions

View File

@@ -4,6 +4,7 @@
#include "webfuse_provider/impl/operation/error.h"
#include "webfuse_provider/impl/request.h"
#include "webfuse_provider/impl/message_writer.h"
#include "webfuse_provider/impl/util/util.h"
@@ -42,23 +43,23 @@ void wfp_impl_respond_getattr(
bool const is_file = (0 != (stat->st_mode & S_IFREG));
bool const is_dir = (0 != (stat->st_mode & S_IFDIR));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(stat->st_ino));
json_object_set_new(result, "mode", json_integer(stat->st_mode & 0777));
json_object_set_new(result, "atime", json_integer(stat->st_atime));
json_object_set_new(result, "mtime", json_integer(stat->st_mtime));
json_object_set_new(result, "ctime", json_integer(stat->st_ctime));
struct wfp_message_writer * writer = wfp_impl_request_get_writer(request);
wfp_impl_message_writer_add_int(writer, "inode", stat->st_ino);
wfp_impl_message_writer_add_int(writer, "mode" , stat->st_mode & 0777);
wfp_impl_message_writer_add_int(writer, "atime", stat->st_atime);
wfp_impl_message_writer_add_int(writer, "mtime", stat->st_mtime);
wfp_impl_message_writer_add_int(writer, "ctime", stat->st_ctime);
if (is_file)
{
json_object_set_new(result, "type", json_string("file"));
json_object_set_new(result, "size", json_integer(stat->st_size));
wfp_impl_message_writer_add_string(writer, "type", "file");
wfp_impl_message_writer_add_int(writer, "size", stat->st_size);
}
if (is_dir)
{
json_object_set_new(result, "type", json_string("dir"));
wfp_impl_message_writer_add_string(writer, "type", "dir");
}
wfp_impl_respond(request, result);
wfp_impl_respond(request);
}

View File

@@ -4,6 +4,7 @@
#include "webfuse_provider/impl/operation/error.h"
#include "webfuse_provider/impl/request.h"
#include "webfuse_provider/impl/message_writer.h"
#include "webfuse_provider/impl/util/util.h"
void wfp_impl_lookup(
@@ -36,25 +37,25 @@ void wfp_impl_respond_lookup(
bool const is_file = (0 != (stat->st_mode & S_IFREG));
bool const is_dir = (0 != (stat->st_mode & S_IFDIR));
json_t * result = json_object();
json_object_set_new(result, "inode", json_integer(stat->st_ino));
json_object_set_new(result, "mode", json_integer(stat->st_mode & 0777));
json_object_set_new(result, "atime", json_integer(stat->st_atime));
json_object_set_new(result, "mtime", json_integer(stat->st_mtime));
json_object_set_new(result, "ctime", json_integer(stat->st_ctime));
struct wfp_message_writer * writer = wfp_impl_request_get_writer(request);
wfp_impl_message_writer_add_int(writer, "inode", stat->st_ino);
wfp_impl_message_writer_add_int(writer, "mode", stat->st_mode & 0777);
wfp_impl_message_writer_add_int(writer, "atime", stat->st_atime);
wfp_impl_message_writer_add_int(writer, "mtime", stat->st_mtime);
wfp_impl_message_writer_add_int(writer, "ctime", stat->st_ctime);
if (is_file)
{
json_object_set_new(result, "type", json_string("file"));
json_object_set_new(result, "size", json_integer(stat->st_size));
wfp_impl_message_writer_add_string(writer, "type", "file");
wfp_impl_message_writer_add_int(writer, "size", stat->st_size);
}
if (is_dir)
{
json_object_set_new(result, "type", json_string("dir"));
wfp_impl_message_writer_add_string(writer, "type", "dir");
}
wfp_impl_respond(request, result);
wfp_impl_respond(request);
}
void wfp_impl_lookup_default(

View File

@@ -1,6 +1,7 @@
#include "webfuse_provider/impl/operation/open.h"
#include "webfuse_provider/impl/operation/error.h"
#include "webfuse_provider/impl/request.h"
#include "webfuse_provider/impl/message_writer.h"
#include "webfuse_provider/impl/util/util.h"
void wfp_impl_open(
@@ -40,8 +41,8 @@ void wfp_impl_respond_open(
struct wfp_request * request,
uint32_t handle)
{
json_t * result = json_object();
json_object_set_new(result, "handle", json_integer((int) handle));
struct wfp_message_writer * writer = wfp_impl_request_get_writer(request);
wfp_impl_message_writer_add_int(writer, "handle", (int) handle);
wfp_impl_respond(request, result);
wfp_impl_respond(request);
}

View File

@@ -4,8 +4,8 @@
#include "webfuse_provider/impl/operation/error.h"
#include "webfuse_provider/impl/request.h"
#include "webfuse_provider/impl/message_writer.h"
#include "webfuse_provider/impl/util/util.h"
#include "webfuse_provider/impl/util/base64.h"
void wfp_impl_read(
struct wfp_impl_invokation_context * context,
@@ -52,27 +52,19 @@ void wfp_impl_respond_read(
char const * data,
size_t length)
{
struct wfp_message_writer * writer = wfp_impl_request_get_writer(request);
if (0 < length)
{
size_t const size = wfp_impl_base64_encoded_size(length) + 1;
char * buffer = malloc(size);
wfp_impl_base64_encode((uint8_t const *) data, length, buffer, size);
json_t * result = json_object();
json_object_set_new(result, "data", json_string(buffer));
json_object_set_new(result, "format", json_string("base64"));
json_object_set_new(result, "count", json_integer((int) length));
wfp_impl_respond(request, result);
free(buffer);
wfp_impl_message_writer_add_bytes(writer, "data", data, length);
wfp_impl_message_writer_add_string(writer, "format", "base64");
}
else
{
json_t * result = json_object();
json_object_set_new(result, "data", json_string(""));
json_object_set_new(result, "format", json_string("identity"));
json_object_set_new(result, "count", json_integer(0));
wfp_impl_respond(request, result);
wfp_impl_message_writer_add_string(writer, "data", "");
wfp_impl_message_writer_add_string(writer, "format", "identity");
}
wfp_impl_message_writer_add_int(writer, "count", ((int) length));
wfp_impl_respond(request);
}

View File

@@ -2,6 +2,7 @@
#include "webfuse_provider/impl/operation/error.h"
#include "webfuse_provider/impl/dirbuffer.h"
#include "webfuse_provider/impl/request.h"
#include "webfuse_provider/impl/message_writer.h"
#include "webfuse_provider/impl/util/util.h"
void wfp_impl_readdir(
@@ -36,7 +37,8 @@ void wfp_impl_respond_readdir(
struct wfp_request * request,
struct wfp_dirbuffer * dirbuffer)
{
json_t * result = wfp_impl_dirbuffer_take(dirbuffer);
wfp_impl_respond(request, result);
struct wfp_message_writer * writer = wfp_impl_request_get_writer(request);
wfp_impl_message_writer_add_dirbuffer(writer, dirbuffer);
wfp_impl_respond(request);
}