fsrpc代码调整
This commit is contained in:
@@ -1,14 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
#include "u_rpc.h"
|
||||
#include "u_rpc_svr.h"
|
||||
#include "u_types.h"
|
||||
#include "u_rpc.h"
|
||||
typedef struct fs
|
||||
{
|
||||
|
||||
typedef struct fs_operations {
|
||||
int (*fs_svr_open)(const char *path, int flags, int mode);
|
||||
int (*fs_svr_read)(int fd, void *buf, size_t len);
|
||||
int (*fs_svr_write)(int fd, void *buf, size_t len);
|
||||
void (*fs_svr_close)(int fd);
|
||||
int (*fs_svr_readdir)(int fd, dirent_t *dir);
|
||||
int (*fs_svr_lseek)(int fd, int offs, int whence);
|
||||
int (*fs_svr_ftruncate)(int fd, off_t off);
|
||||
int (*fs_svr_fstat)(int fd, void *buf);
|
||||
int (*fs_svr_ioctl)(int fd, int req, void *arg);
|
||||
int (*fs_svr_fcntl)(int fd, int cmd, void *arg);
|
||||
int (*fs_svr_fsync)(int fd);
|
||||
int (*fs_svr_unlink)(const char *path);
|
||||
int (*fs_svr_symlink)(const char *existing, const char *new);
|
||||
int (*fs_svr_mkdir)(char *path);
|
||||
int (*fs_svr_rmdir)(char *path);
|
||||
int (*fs_svr_rename)(char *old, char *new);
|
||||
int (*fs_svr_stat)(const char *path, void *buf);
|
||||
ssize_t (*fs_svr_readlink)(const char *path, char *buf, size_t bufsize);
|
||||
int (*fs_svr_statfs)(const char *path, struct statfs *buf);
|
||||
} fs_operations_t;
|
||||
|
||||
typedef struct fs {
|
||||
rpc_svr_obj_t svr;
|
||||
const fs_operations_t *op;
|
||||
} fs_t;
|
||||
|
||||
void fs_init(fs_t *fs);
|
||||
void fs_init(fs_t *fs, const fs_operations_t *op);
|
||||
|
||||
int fs_svr_open(const char *path, int flags, int mode);
|
||||
int fs_svr_read(int fd, void *buf, size_t len);
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#include "fs_svr.h"
|
||||
#include "fs_types.h"
|
||||
#include "kstat.h"
|
||||
#include "rpc_prot.h"
|
||||
#include "u_hd_man.h"
|
||||
#include "u_rpc.h"
|
||||
#include "u_rpc_svr.h"
|
||||
#include "u_hd_man.h"
|
||||
#include "fs_svr.h"
|
||||
#include "u_rpc.h"
|
||||
#include "fs_types.h"
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include "kstat.h"
|
||||
typedef struct kstat kstat_t;
|
||||
RPC_TYPE_DEF_ALL(kstat_t)
|
||||
/*open*/
|
||||
@@ -17,7 +16,10 @@ RPC_GENERATION_OP3(fs_t, FS_PROT, FS_OPEN, open,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, mode)
|
||||
{
|
||||
path->data[path->len - 1] = 0;
|
||||
int ret = fs_svr_open((char *)(path->data), flags->data, mode->data);
|
||||
if (!obj->op->fs_svr_open) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_open((char *)(path->data), flags->data, mode->data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -29,7 +31,10 @@ RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_OPEN, open,
|
||||
RPC_GENERATION_OP1(fs_t, FS_PROT, FS_CLOSE, close,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd)
|
||||
{
|
||||
fs_svr_close(fd->data);
|
||||
if (!obj->op->fs_svr_close) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
obj->op->fs_svr_close(fd->data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -42,10 +47,12 @@ RPC_GENERATION_OP3(fs_t, FS_PROT, FS_READ, read,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len)
|
||||
{
|
||||
int ret = fs_svr_read(fd->data, buf->data, len->data);
|
||||
if (!obj->op->fs_svr_read) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_read(fd->data, buf->data, len->data);
|
||||
|
||||
if (ret >= 0)
|
||||
{
|
||||
if (ret >= 0) {
|
||||
buf->len = ret;
|
||||
}
|
||||
return ret;
|
||||
@@ -62,7 +69,10 @@ RPC_GENERATION_OP3(fs_t, FS_PROT, FS_WRITE, write,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, buf,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len)
|
||||
{
|
||||
int ret = fs_svr_write(fd->data, buf->data, len->data);
|
||||
if (!obj->op->fs_svr_write) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_write(fd->data, buf->data, len->data);
|
||||
return ret;
|
||||
}
|
||||
RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_WRITE, write,
|
||||
@@ -75,7 +85,10 @@ RPC_GENERATION_OP2(fs_t, FS_PROT, FS_READDIR, readdir,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_dirent_t_t, rpc_dirent_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, dir)
|
||||
{
|
||||
return fs_svr_readdir(fd->data, &dir->data);
|
||||
if (!obj->op->fs_svr_readdir) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
return obj->op->fs_svr_readdir(fd->data, &dir->data);
|
||||
}
|
||||
|
||||
RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_READDIR, readdir,
|
||||
@@ -88,7 +101,10 @@ RPC_GENERATION_OP3(fs_t, FS_PROT, FS_LSEEK, lseek,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, offs,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, whence)
|
||||
{
|
||||
int ret = fs_svr_lseek(fd->data, offs->data, whence->data);
|
||||
if (!obj->op->fs_svr_lseek) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_lseek(fd->data, offs->data, whence->data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -102,7 +118,10 @@ RPC_GENERATION_OP2(fs_t, FS_PROT, FS_FTRUNCATE, ftruncate,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_int64_t_t, rpc_int64_t_t, RPC_DIR_IN, RPC_TYPE_DATA, offs)
|
||||
{
|
||||
int ret = fs_svr_ftruncate(fd->data, offs->data);
|
||||
if (!obj->op->fs_svr_ftruncate) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_ftruncate(fd->data, offs->data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -114,7 +133,10 @@ RPC_GENERATION_OP2(fs_t, FS_PROT, FS_FSTAT, fstat,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd,
|
||||
rpc_kstat_t_t, rpc_kstat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, statbuf)
|
||||
{
|
||||
int ret = fs_svr_fstat(fd->data, &statbuf->data);
|
||||
if (!obj->op->fs_svr_fstat) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_fstat(fd->data, &statbuf->data);
|
||||
return ret;
|
||||
}
|
||||
RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_FSTAT, fstat,
|
||||
@@ -128,11 +150,14 @@ RPC_GENERATION_OP3(fs_t, FS_PROT, FS_IOCTL, ioctl,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, arg)
|
||||
|
||||
{
|
||||
int ret = fs_svr_ioctl(fd->data, req->data, (void *)arg->data /*TODO:可能传递的内存指针*/);
|
||||
if (!obj->op->fs_svr_ioctl) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_ioctl(fd->data, req->data, (void *)arg->data /*TODO:可能传递的内存指针*/);
|
||||
|
||||
return ret;
|
||||
}
|
||||
__attribute__((__weak__)) int fs_svr_ioctl(int fd, int req, void *arg)
|
||||
__attribute__((__weak__)) int fs_svr_ioctl(int fd, int req, void *arg)
|
||||
{
|
||||
printf("%s is not support.\n", __func__);
|
||||
return -ENOSYS;
|
||||
@@ -148,7 +173,10 @@ RPC_GENERATION_OP3(fs_t, FS_PROT, FS_FCNTL, fcntl,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, cmd,
|
||||
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, arg)
|
||||
{
|
||||
int ret = fs_svr_fcntl(fd->data, cmd->data, (void *)arg->data /*TODO:可能传递的内存指针*/);
|
||||
if (!obj->op->fs_svr_fcntl) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
int ret = obj->op->fs_svr_fcntl(fd->data, cmd->data, (void *)arg->data /*TODO:可能传递的内存指针*/);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -161,7 +189,10 @@ RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_FCNTL, fcntl,
|
||||
RPC_GENERATION_OP1(fs_t, FS_PROT, FS_FSYNC, fsync,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd)
|
||||
{
|
||||
return fs_svr_fsync(fd->data);
|
||||
if (!obj->op->fs_svr_fsync) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
return obj->op->fs_svr_fsync(fd->data);
|
||||
}
|
||||
|
||||
RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_FSYNC, fsync,
|
||||
@@ -170,8 +201,11 @@ RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_FSYNC, fsync,
|
||||
RPC_GENERATION_OP1(fs_t, FS_PROT, FS_UNLINK, unlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path)
|
||||
{
|
||||
if (!obj->op->fs_svr_unlink) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
path->data[path->len - 1] = 0;
|
||||
return fs_svr_unlink(path->data);
|
||||
return obj->op->fs_svr_unlink(path->data);
|
||||
}
|
||||
RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_UNLINK, unlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path)
|
||||
@@ -180,10 +214,13 @@ RPC_GENERATION_OP2(fs_t, FS_PROT, FS_SYMLINK, symlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, src,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dst)
|
||||
{
|
||||
if (!obj->op->fs_svr_symlink) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
src->data[src->len - 1] = 0;
|
||||
dst->data[dst->len - 1] = 0;
|
||||
|
||||
return fs_svr_symlink(src->data, src->data);
|
||||
return obj->op->fs_svr_symlink(src->data, src->data);
|
||||
}
|
||||
RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_SYMLINK, symlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, src,
|
||||
@@ -193,8 +230,11 @@ RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_SYMLINK, symlink,
|
||||
RPC_GENERATION_OP1(fs_t, FS_PROT, FS_MKDIR, mkdir,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir)
|
||||
{
|
||||
if (!obj->op->fs_svr_mkdir) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
dir->data[dir->len - 1] = 0;
|
||||
return fs_svr_mkdir(dir->data);
|
||||
return obj->op->fs_svr_mkdir(dir->data);
|
||||
}
|
||||
RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_MKDIR, mkdir,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir)
|
||||
@@ -202,8 +242,11 @@ RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_MKDIR, mkdir,
|
||||
RPC_GENERATION_OP1(fs_t, FS_PROT, FS_RMDIR, rmdir,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir)
|
||||
{
|
||||
if (!obj->op->fs_svr_rmdir) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
dir->data[dir->len - 1] = 0;
|
||||
return fs_svr_rmdir(dir->data);
|
||||
return obj->op->fs_svr_rmdir(dir->data);
|
||||
}
|
||||
RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_RMDIR, rmdir,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir)
|
||||
@@ -213,10 +256,13 @@ RPC_GENERATION_OP2(fs_t, FS_PROT, FS_RENAME, rename,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, old,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, new)
|
||||
{
|
||||
if (!obj->op->fs_svr_rename) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
old->data[old->len - 1] = 0;
|
||||
new->data[new->len - 1] = 0;
|
||||
|
||||
return fs_svr_rename(old->data, new->data);
|
||||
return obj->op->fs_svr_rename(old->data, new->data);
|
||||
}
|
||||
RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_RENAME, rename,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, old,
|
||||
@@ -227,8 +273,11 @@ RPC_GENERATION_OP2(fs_t, FS_PROT, FS_STAT, stat,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_kstat_t_t, rpc_kstat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf)
|
||||
{
|
||||
if (!obj->op->fs_svr_stat) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
path->data[path->len - 1] = 0;
|
||||
return fs_svr_stat(path->data, &buf->data);
|
||||
return obj->op->fs_svr_stat(path->data, &buf->data);
|
||||
}
|
||||
RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_STAT, stat,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
@@ -240,10 +289,13 @@ RPC_GENERATION_OP3(fs_t, FS_PROT, FS_READLINK, readlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf,
|
||||
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, bufsize)
|
||||
{
|
||||
if (!obj->op->fs_svr_readlink) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
path->data[path->len - 1] = 0;
|
||||
// buf->data[buf->len - 1] = 0;
|
||||
|
||||
return fs_svr_readlink(path->data, buf->data, MIN(bufsize->data, buf->len));
|
||||
return obj->op->fs_svr_readlink(path->data, buf->data, MIN(bufsize->data, buf->len));
|
||||
}
|
||||
RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_READLINK, readlink,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
@@ -255,8 +307,11 @@ RPC_GENERATION_OP2(fs_t, FS_PROT, FS_STATFS, statfs,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
rpc_statfs_t_t, rpc_statfs_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf)
|
||||
{
|
||||
if (!obj->op->fs_svr_statfs) {
|
||||
return -ENOSYS;
|
||||
}
|
||||
path->data[path->len - 1] = 0;
|
||||
return fs_svr_statfs(path->data, &buf->data);
|
||||
return obj->op->fs_svr_statfs(path->data, &buf->data);
|
||||
}
|
||||
RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_STATFS, statfs,
|
||||
rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
|
||||
@@ -270,7 +325,8 @@ RPC_DISPATCH18(fs_t, FS_PROT, typeof(FS_OPEN), FS_OPEN, open, FS_READ, read,
|
||||
FS_RMDIR, rmdir, FS_STAT, stat,
|
||||
FS_READLINK, readlink, FS_STATFS, statfs, FS_IOCTL, ioctl)
|
||||
|
||||
void fs_init(fs_t *fs)
|
||||
void fs_init(fs_t *fs, const fs_operations_t *op)
|
||||
{
|
||||
fs->op = op;
|
||||
rpc_svr_obj_init(&fs->svr, rpc_fs_t_dispatch, FS_PROT);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user