mirror of
https://github.com/falk-werner/webfuse
synced 2024-10-27 20:34:10 +00:00
added close operation
This commit is contained in:
parent
1e4647356d
commit
f47868ded7
@ -41,6 +41,7 @@ add_library(fuse-wsfs
|
|||||||
src/wsfs/operation/getattr.c
|
src/wsfs/operation/getattr.c
|
||||||
src/wsfs/operation/readdir.c
|
src/wsfs/operation/readdir.c
|
||||||
src/wsfs/operation/open.c
|
src/wsfs/operation/open.c
|
||||||
|
src/wsfs/operation/close.c
|
||||||
src/wsfs/operation/read.c
|
src/wsfs/operation/read.c
|
||||||
src/wsfs/response_parser.c
|
src/wsfs/response_parser.c
|
||||||
src/wsfs/server.c
|
src/wsfs/server.c
|
||||||
|
@ -73,13 +73,18 @@ class FileSystem {
|
|||||||
let entry = this._getEntry(path);
|
let entry = this._getEntry(path);
|
||||||
|
|
||||||
if (entry.type == "file") {
|
if (entry.type == "file") {
|
||||||
result = ((mode & FileSystem.O_ACCMODE) == FileSystem.O_RDONLY) ? true : FileSystem.BAD_NOACCESS;
|
result = ((mode & FileSystem.O_ACCMODE) == FileSystem.O_RDONLY) ? {handle: 1337} : FileSystem.BAD_NOACCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
read(path, offset, length) {
|
close(path, handle, mode) {
|
||||||
|
// do nothing
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
read(path, handle, offset, length) {
|
||||||
let result = FileSystem.BAD_NOENTRY;
|
let result = FileSystem.BAD_NOENTRY;
|
||||||
let entry = this._getEntry(path);
|
let entry = this._getEntry(path);
|
||||||
|
|
||||||
|
@ -23,17 +23,41 @@ class FileSystemHandler {
|
|||||||
switch(request.method)
|
switch(request.method)
|
||||||
{
|
{
|
||||||
case "getattr":
|
case "getattr":
|
||||||
result = this._fs.getattr(request.params[0]);
|
{
|
||||||
break;
|
const path = request.params[0];
|
||||||
|
result = this._fs.getattr(path);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "readdir":
|
case "readdir":
|
||||||
result = this._fs.readdir(request.params[0]);
|
{
|
||||||
break;
|
const path = request.params[0];
|
||||||
|
result = this._fs.readdir(path);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "open":
|
case "open":
|
||||||
result = this._fs.open(request.params[0], request.params[1]);
|
{
|
||||||
break;
|
const path = request.params[0];
|
||||||
|
const mode = request.params[1];
|
||||||
|
result = this._fs.open(path, mode);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "close":
|
||||||
|
{
|
||||||
|
const path = request.params[0];
|
||||||
|
const handle = request.params[1];
|
||||||
|
const mode = request.params[2];
|
||||||
|
result = this._fs.open(path, handle, mode);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "read":
|
case "read":
|
||||||
result = this._fs.read(request.params[0], request.params[1], request.params[2]);
|
{
|
||||||
break;
|
const path = request.params[0];
|
||||||
|
const handle = request.params[1];
|
||||||
|
const offset = request.params[2];
|
||||||
|
const length = request.params[3];
|
||||||
|
result = this._fs.read(path, handle, offset, length);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,8 @@ function startup() {
|
|||||||
mode: 0755,
|
mode: 0755,
|
||||||
type: "dir",
|
type: "dir",
|
||||||
entries: {
|
entries: {
|
||||||
"hello": { mode: 0755, type: "file", /* size: 10 , */contents: "Hello, World!"}
|
"hello.txt" : { mode: 0444, type: "file", contents: "Hello, World!"},
|
||||||
|
"say_hello.sh": { mode: 0555, type: "file", contents: "#!/bin/sh\necho hello\n"}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
let handler = new FileSystemHandler(fs, connection);
|
let handler = new FileSystemHandler(fs, connection);
|
||||||
|
25
src/wsfs/operation/close.c
Normal file
25
src/wsfs/operation/close.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include "wsfs/operations.h"
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#include <jansson.h>
|
||||||
|
#include "wsfs/jsonrpc.h"
|
||||||
|
|
||||||
|
int wsfs_operation_close(
|
||||||
|
char const *path,
|
||||||
|
struct fuse_file_info * file_info)
|
||||||
|
{
|
||||||
|
struct fuse_context * context = fuse_get_context();
|
||||||
|
struct wsfs_jsonrpc * rpc = context->private_data;
|
||||||
|
|
||||||
|
json_t * result = NULL;
|
||||||
|
int handle = (int) (file_info->fh & INT_MAX);
|
||||||
|
wsfs_status const status = wsfs_jsonrpc_invoke(rpc, &result, "close", "sii", path, handle, file_info->flags);
|
||||||
|
if (NULL != result)
|
||||||
|
{
|
||||||
|
// unused
|
||||||
|
json_decref(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return wsfs_status_to_rc(status);
|
||||||
|
}
|
@ -11,10 +11,19 @@ int wsfs_operation_open(
|
|||||||
struct wsfs_jsonrpc * rpc = context->private_data;
|
struct wsfs_jsonrpc * rpc = context->private_data;
|
||||||
|
|
||||||
json_t * result = NULL;
|
json_t * result = NULL;
|
||||||
wsfs_status const status = wsfs_jsonrpc_invoke(rpc, &result, "open", "si", path, file_info->flags);
|
wsfs_status status = wsfs_jsonrpc_invoke(rpc, &result, "open", "si", path, file_info->flags);
|
||||||
if (NULL != result)
|
if (NULL != result)
|
||||||
{
|
{
|
||||||
// unused
|
json_t * handle_holder = json_object_get(result, "handle");
|
||||||
|
if ((NULL != handle_holder) && (json_is_integer(handle_holder)))
|
||||||
|
{
|
||||||
|
file_info->fh = json_integer_value(handle_holder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = WSFS_BAD_FORMAT;
|
||||||
|
}
|
||||||
|
|
||||||
json_decref(result);
|
json_decref(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
#include "wsfs/operations.h"
|
#include "wsfs/operations.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
|
|
||||||
#include "wsfs/util.h"
|
|
||||||
#include "wsfs/jsonrpc.h"
|
#include "wsfs/jsonrpc.h"
|
||||||
|
|
||||||
#define WSFS_MAX_READ_LENGTH 4096
|
#define WSFS_MAX_READ_LENGTH 4096
|
||||||
@ -38,7 +38,7 @@ int wsfs_operation_read(
|
|||||||
char * buffer,
|
char * buffer,
|
||||||
size_t buffer_size,
|
size_t buffer_size,
|
||||||
off_t offset,
|
off_t offset,
|
||||||
struct fuse_file_info * WSFS_UNUSED_PARAM(file_info))
|
struct fuse_file_info * file_info)
|
||||||
{
|
{
|
||||||
struct fuse_context * context = fuse_get_context();
|
struct fuse_context * context = fuse_get_context();
|
||||||
struct wsfs_jsonrpc * rpc = context->private_data;
|
struct wsfs_jsonrpc * rpc = context->private_data;
|
||||||
@ -46,7 +46,8 @@ int wsfs_operation_read(
|
|||||||
int const length = (buffer_size <= WSFS_MAX_READ_LENGTH) ? (int) buffer_size : WSFS_MAX_READ_LENGTH;
|
int const length = (buffer_size <= WSFS_MAX_READ_LENGTH) ? (int) buffer_size : WSFS_MAX_READ_LENGTH;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
json_t * data = NULL;
|
json_t * data = NULL;
|
||||||
wsfs_status status = wsfs_jsonrpc_invoke(rpc, &data, "read", "sii", path, (int) offset, length);
|
int handle = (file_info->fh & INT_MAX);
|
||||||
|
wsfs_status status = wsfs_jsonrpc_invoke(rpc, &data, "read", "siii", path, handle, (int) offset, length);
|
||||||
if (NULL != data)
|
if (NULL != data)
|
||||||
{
|
{
|
||||||
json_t * data_holder = json_object_get(data, "data");
|
json_t * data_holder = json_object_get(data, "data");
|
||||||
|
@ -23,6 +23,7 @@ void wsfs_operations_init(
|
|||||||
operations->getattr = &wsfs_operation_getattr;
|
operations->getattr = &wsfs_operation_getattr;
|
||||||
operations->readdir = &wsfs_operation_readdir;
|
operations->readdir = &wsfs_operation_readdir;
|
||||||
operations->open = &wsfs_operation_open;
|
operations->open = &wsfs_operation_open;
|
||||||
|
operations->release = &wsfs_operation_close;
|
||||||
operations->read = &wsfs_operation_read;
|
operations->read = &wsfs_operation_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,10 @@ extern int wsfs_operation_open(
|
|||||||
char const *path,
|
char const *path,
|
||||||
struct fuse_file_info * file_info);
|
struct fuse_file_info * file_info);
|
||||||
|
|
||||||
|
extern int wsfs_operation_close(
|
||||||
|
char const *path,
|
||||||
|
struct fuse_file_info * file_info);
|
||||||
|
|
||||||
extern int wsfs_operation_read(
|
extern int wsfs_operation_read(
|
||||||
const char * path,
|
const char * path,
|
||||||
char * buffer,
|
char * buffer,
|
||||||
|
Loading…
Reference in New Issue
Block a user