summaryrefslogtreecommitdiff
path: root/netfs/fuseMisc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netfs/fuseMisc.cpp')
-rw-r--r--netfs/fuseMisc.cpp141
1 files changed, 93 insertions, 48 deletions
diff --git a/netfs/fuseMisc.cpp b/netfs/fuseMisc.cpp
index 2746916..074da48 100644
--- a/netfs/fuseMisc.cpp
+++ b/netfs/fuseMisc.cpp
@@ -1,87 +1,132 @@
#include "fuse.h"
-#include "msgtypes.h"
#include <string.h>
int
NetFS::access(const char * p, int a)
{
- TypedPayloadReq<AccessRequest>::Ptr msg = new TypedPayloadReq<AccessRequest>(fuse_get_context());
- msg->data.access = a;
- msg->data.path = p;
- return -msg->exchange(this)->data.value;
+ return -misc->access(p, a);
}
int
NetFS::getattr(const char * p, struct stat * s)
{
- TypedPayloadReq<GetAttrRequest>::Ptr msg = new TypedPayloadReq<GetAttrRequest>(fuse_get_context());
- msg->data.path = p;
- TypedPayload<GetAttrReply>::Ptr rep = msg->exchange(this);
- *s = rep->data.val;
- return -rep->data.res;
+ try {
+ NetFSComms::Attr a = misc->getattr(p);
+ s->st_dev = a.dev;
+ s->st_ino = a.inode;
+ s->st_mode = a.mode;
+ s->st_nlink = a.links;
+ s->st_uid = a.uid;
+ s->st_gid = a.gid;
+ s->st_rdev = a.rdev;
+ s->st_size = a.size;
+ s->st_blksize = a.blockSize;
+ s->st_blocks = a.blocks;
+ s->st_atime = a.atime;
+ s->st_mtime = a.mtime;
+ s->st_ctime = a.ctime;
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+
int
NetFS::fgetattr(const char *, struct stat * s, fuse_file_info * fi)
{
- TypedPayloadReq<FgetAttrRequest>::Ptr msg = new TypedPayloadReq<FgetAttrRequest>(fuse_get_context());
- msg->data.handle = fi->fh;
- TypedPayload<GetAttrReply>::Ptr rep = msg->exchange(this);
- *s = rep->data.val;
- return -rep->data.res;
+ try {
+ NetFSComms::Attr a = misc->fgetattr(fi->fh);
+ s->st_dev = a.dev;
+ s->st_ino = a.inode;
+ s->st_mode = a.mode;
+ s->st_nlink = a.links;
+ s->st_uid = a.uid;
+ s->st_gid = a.gid;
+ s->st_rdev = a.rdev;
+ s->st_size = a.size;
+ s->st_blksize = a.blockSize;
+ s->st_blocks = a.blocks;
+ s->st_atime = a.atime;
+ s->st_mtime = a.mtime;
+ s->st_ctime = a.ctime;
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+
int
NetFS::chmod(const char * p, mode_t m)
{
- TypedPayloadReq<ChmodRequest>::Ptr msg = new TypedPayloadReq<ChmodRequest>(fuse_get_context());
- msg->data.path = p;
- msg->data.mode = m;
- return msg->exchange(this)->data.value;
+ try {
+ misc->chmod(p, m);
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+
int
NetFS::chown(const char * p, uid_t u, gid_t g)
{
- TypedPayloadReq<ChownRequest>::Ptr msg = new TypedPayloadReq<ChownRequest>(fuse_get_context());
- msg->data.path = p;
- msg->data.user = u;
- msg->data.group = g;
- return msg->exchange(this)->data.value;
+ try {
+ misc->chown(p, u, g);
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+
int
NetFS::link(const char * p1, const char * p2)
{
- TypedPayloadReq<LinkRequest>::Ptr msg = new TypedPayloadReq<LinkRequest>(fuse_get_context());
- msg->data.path1 = p1;
- msg->data.path2 = p2;
- return msg->exchange(this)->data.value;
+ try {
+ misc->link(p1, p2);
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+
int
NetFS::symlink(const char * p1, const char * p2)
{
- TypedPayloadReq<SymlinkRequest>::Ptr msg = new TypedPayloadReq<SymlinkRequest>(fuse_get_context());
- msg->data.path1 = p1;
- msg->data.path2 = p2;
- return msg->exchange(this)->data.value;
+ try {
+ misc->symlink(p1, p2);
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+
int
NetFS::readlink(const char * p, char * p2, size_t s)
{
- TypedPayloadReq<ReadlinkRequest>::Ptr msg = new TypedPayloadReq<ReadlinkRequest>(fuse_get_context());
- msg->data.path = p;
- TypedPayload<ReadlinkReply>::Ptr rep = msg->exchange(this);
- strncpy(p2, rep->data.path.c_str(), std::min(rep->data.path.length(), s));
- return -rep->data.error;
+ try {
+ std::string l = misc->readlink(p);
+ l.copy(p2, s);
+ p2[s] = '\0';
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+
int
NetFS::rename(const char * p1, const char * p2)
{
- TypedPayloadReq<RenameRequest>::Ptr msg = new TypedPayloadReq<RenameRequest>(fuse_get_context());
- msg->data.path1 = p1;
- msg->data.path2 = p2;
- return msg->exchange(this)->data.value;
-}
-int
-NetFS::unlink(const char * p)
-{
- TypedPayloadReq<UnlinkRequest>::Ptr msg = new TypedPayloadReq<UnlinkRequest>(fuse_get_context());
- msg->data.path = p;
- return msg->exchange(this)->data.value;
+ try {
+ misc->rename(p1, p2);
+ return 0;
+ }
+ catch (NetFSComms::SystemError & e) {
+ return -e.syserrno;
+ }
}
+