diff options
Diffstat (limited to 'netfs/fuseMisc.cpp')
-rw-r--r-- | netfs/fuseMisc.cpp | 141 |
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; + } } + |