#include "fuse.h" #include "msgtypes.h" #include int NetFS::access(const char * p, int a) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.access = a; msg->data.path = p; return -msg->exchange(this)->data.value; } int NetFS::getattr(const char * p, struct stat * s) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path = p; TypedPayload::Ptr rep = msg->exchange(this); *s = rep->data.val; return -rep->data.res; } int NetFS::fgetattr(const char *, struct stat * s, fuse_file_info * fi) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.handle = fi->fh; TypedPayload::Ptr rep = msg->exchange(this); *s = rep->data.val; return -rep->data.res; } int NetFS::chmod(const char * p, mode_t m) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path = p; msg->data.mode = m; return msg->exchange(this)->data.value; } int NetFS::chown(const char * p, uid_t u, gid_t g) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path = p; msg->data.user = u; msg->data.group = g; return msg->exchange(this)->data.value; } int NetFS::link(const char * p1, const char * p2) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path1 = p1; msg->data.path2 = p2; return msg->exchange(this)->data.value; } int NetFS::symlink(const char * p1, const char * p2) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path1 = p1; msg->data.path2 = p2; return msg->exchange(this)->data.value; } int NetFS::readlink(const char * p, char * p2, size_t s) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path = p; TypedPayload::Ptr rep = msg->exchange(this); strncpy(p2, rep->data.path.c_str(), std::min(rep->data.path.length(), s)); return -rep->data.error; } int NetFS::rename(const char * p1, const char * p2) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path1 = p1; msg->data.path2 = p2; return msg->exchange(this)->data.value; } int NetFS::unlink(const char * p) { TypedPayloadReq::Ptr msg = new TypedPayloadReq(fuse_get_context()); msg->data.path = p; return msg->exchange(this)->data.value; }