Added chmod/chown

This commit is contained in:
Sebastian Messmer 2015-04-21 21:08:23 +02:00
parent f746d83141
commit f8b26d31e3
5 changed files with 27 additions and 14 deletions

View File

@ -13,6 +13,8 @@ public:
virtual ~Node() {} virtual ~Node() {}
virtual void stat(struct ::stat *result) const = 0; virtual void stat(struct ::stat *result) const = 0;
virtual void chmod(mode_t mode) = 0;
virtual void chown(uid_t uid, gid_t gid) = 0;
virtual void access(int mask) const = 0; virtual void access(int mask) const = 0;
virtual void rename(const boost::filesystem::path &to) = 0; virtual void rename(const boost::filesystem::path &to) = 0;
virtual void utimens(const timespec times[2]) = 0; virtual void utimens(const timespec times[2]) = 0;

View File

@ -20,6 +20,8 @@ public:
virtual void closeFile(int descriptor) = 0; virtual void closeFile(int descriptor) = 0;
virtual void lstat(const boost::filesystem::path &path, struct ::stat *stbuf) = 0; virtual void lstat(const boost::filesystem::path &path, struct ::stat *stbuf) = 0;
virtual void fstat(int descriptor, struct ::stat *stbuf) = 0; virtual void fstat(int descriptor, struct ::stat *stbuf) = 0;
virtual void chmod(const boost::filesystem::path &path, mode_t mode) = 0;
virtual void chown(const boost::filesystem::path &path, uid_t uid, gid_t gid) = 0;
virtual void truncate(const boost::filesystem::path &path, off_t size) = 0; virtual void truncate(const boost::filesystem::path &path, off_t size) = 0;
virtual void ftruncate(int descriptor, off_t size) = 0; virtual void ftruncate(int descriptor, off_t size) = 0;
virtual int read(int descriptor, void *buf, size_t count, off_t offset) = 0; virtual int read(int descriptor, void *buf, size_t count, off_t offset) = 0;

View File

@ -241,7 +241,7 @@ int Fuse::fgetattr(const bf::path &path, struct stat *stbuf, fuse_file_info *fil
} }
try { try {
_fs->fstat(fileinfo->fh, stbuf); _fs->fstat(fileinfo->fh, stbuf);
return 0; return 0;
} catch(fspp::fuse::FuseErrnoException &e) { } catch(fspp::fuse::FuseErrnoException &e) {
return -e.getErrno(); return -e.getErrno();
@ -324,22 +324,22 @@ int Fuse::link(const bf::path &from, const bf::path &to) {
return ENOSYS; return ENOSYS;
} }
//TODO
int Fuse::chmod(const bf::path &path, mode_t mode) { int Fuse::chmod(const bf::path &path, mode_t mode) {
printf("NOT IMPLEMENTED: chmod(%s, %d)\n", path.c_str(), mode); try {
//auto real_path = _impl->RootDir() / path; _fs->chmod(path, mode);
//int retstat = ::chmod(real_path.c_str(), mode); return 0;
//return errcode_map(retstat); } catch (fspp::fuse::FuseErrnoException &e) {
return ENOSYS; return -e.getErrno();
}
} }
//TODO
int Fuse::chown(const bf::path &path, uid_t uid, gid_t gid) { int Fuse::chown(const bf::path &path, uid_t uid, gid_t gid) {
printf("NOT IMPLEMENTED: chown(%s, %d, %d)\n", path.c_str(), uid, gid); try {
//auto real_path = _impl->RootDir() / path; _fs->chown(path, uid, gid);
//int retstat = ::chown(real_path.c_str(), uid, gid); return 0;
//return errcode_map(retstat); } catch (fspp::fuse::FuseErrnoException &e) {
return ENOSYS; return -e.getErrno();
}
} }
int Fuse::truncate(const bf::path &path, off_t size) { int Fuse::truncate(const bf::path &path, off_t size) {

View File

@ -71,6 +71,14 @@ void FilesystemImpl::fstat(int descriptor, struct ::stat *stbuf) {
_open_files.get(descriptor)->stat(stbuf); _open_files.get(descriptor)->stat(stbuf);
} }
void FilesystemImpl::chmod(const boost::filesystem::path &path, mode_t mode) {
_device->Load(path)->chmod(mode);
}
void FilesystemImpl::chown(const boost::filesystem::path &path, uid_t uid, gid_t gid) {
_device->Load(path)->chown(uid, gid);
}
void FilesystemImpl::truncate(const bf::path &path, off_t size) { void FilesystemImpl::truncate(const bf::path &path, off_t size) {
LoadFile(path)->truncate(size); LoadFile(path)->truncate(size);
} }
@ -84,7 +92,6 @@ int FilesystemImpl::read(int descriptor, void *buf, size_t count, off_t offset)
} }
void FilesystemImpl::write(int descriptor, const void *buf, size_t count, off_t offset) { void FilesystemImpl::write(int descriptor, const void *buf, size_t count, off_t offset) {
//printf("Write %d bytes to offset %d\n", count, offset);fflush(stdout);
_open_files.get(descriptor)->write(buf, count, offset); _open_files.get(descriptor)->write(buf, count, offset);
} }

View File

@ -22,6 +22,8 @@ public:
void closeFile(int descriptor) override; void closeFile(int descriptor) override;
void lstat(const boost::filesystem::path &path, struct ::stat *stbuf) override; void lstat(const boost::filesystem::path &path, struct ::stat *stbuf) override;
void fstat(int descriptor, struct ::stat *stbuf) override; void fstat(int descriptor, struct ::stat *stbuf) override;
void chmod(const boost::filesystem::path &path, mode_t mode) override;
void chown(const boost::filesystem::path &path, uid_t uid, gid_t gid) override;
void truncate(const boost::filesystem::path &path, off_t size) override; void truncate(const boost::filesystem::path &path, off_t size) override;
void ftruncate(int descriptor, off_t size) override; void ftruncate(int descriptor, off_t size) override;
int read(int descriptor, void *buf, size_t count, off_t offset) override; int read(int descriptor, void *buf, size_t count, off_t offset) override;