From e561f52dd54e4928d60f01e71d1f70c262ad82e4 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Wed, 12 Nov 2014 12:43:49 +0100 Subject: [PATCH] rename --- src/CryFuse.cpp | 22 ++++++++++++---------- src/cryfs_lib/CryDevice.cpp | 5 +++++ src/cryfs_lib/CryDevice.h | 1 + src/cryfs_lib/CryNode.cpp | 7 +++++++ src/cryfs_lib/CryNode.h | 3 ++- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/CryFuse.cpp b/src/CryFuse.cpp index f8521697..29144d9b 100644 --- a/src/CryFuse.cpp +++ b/src/CryFuse.cpp @@ -111,20 +111,22 @@ int CryFuse::rmdir(const path &path) { //TODO int CryFuse::symlink(const path &from, const path &to) { - //printf("symlink(%s, %s)\n", from.c_str(), to.c_str()); - auto real_from = _device->RootDir() / from; - auto real_to = _device->RootDir() / to; - int retstat = ::symlink(real_from.c_str(), real_to.c_str()); - return errcode_map(retstat); + printf("NOT IMPLEMENTED: symlink(%s, %s)\n", from.c_str(), to.c_str()); + //auto real_from = _device->RootDir() / from; + //auto real_to = _device->RootDir() / to; + //int retstat = ::symlink(real_from.c_str(), real_to.c_str()); + //return errcode_map(retstat); + return EIO; //TODO Correct return value } -//TODO int CryFuse::rename(const path &from, const path &to) { //printf("rename(%s, %s)\n", from.c_str(), to.c_str()); - auto real_from = _device->RootDir() / from; - auto real_to = _device->RootDir() / to; - int retstat = ::rename(real_from.c_str(), real_to.c_str()); - return errcode_map(retstat); + try { + _device->rename(from, to); + return 0; + } catch(cryfs::CryErrnoException &e) { + return -e.getErrno(); + } } //TODO diff --git a/src/cryfs_lib/CryDevice.cpp b/src/cryfs_lib/CryDevice.cpp index 45b597c2..aa42944d 100644 --- a/src/cryfs_lib/CryDevice.cpp +++ b/src/cryfs_lib/CryDevice.cpp @@ -121,3 +121,8 @@ void CryDevice::unlink(const bf::path &path) { auto file = LoadFile(path); file->unlink(); } + +void CryDevice::rename(const bf::path &from, const bf::path &to) { + auto node = Load(from); + node->rename(to); +} diff --git a/src/cryfs_lib/CryDevice.h b/src/cryfs_lib/CryDevice.h index 02d5fe2e..e0e83163 100644 --- a/src/cryfs_lib/CryDevice.h +++ b/src/cryfs_lib/CryDevice.h @@ -37,6 +37,7 @@ public: void mkdir(const bf::path &path, mode_t mode); void rmdir(const bf::path &path); void unlink(const bf::path &path); + void rename(const bf::path &from, const bf::path &to); const bf::path &RootDir() const; private: diff --git a/src/cryfs_lib/CryNode.cpp b/src/cryfs_lib/CryNode.cpp index 6cda4f36..3b4bd836 100644 --- a/src/cryfs_lib/CryNode.cpp +++ b/src/cryfs_lib/CryNode.cpp @@ -22,4 +22,11 @@ void CryNode::access(int mask) const { CHECK_RETVAL(retval); } +void CryNode::rename(const bf::path &to) { + auto new_base_path = device()->RootDir() / to; + int retval = ::rename(base_path().c_str(), new_base_path.c_str()); + CHECK_RETVAL(retval); + _path = to; +} + } /* namespace cryfs */ diff --git a/src/cryfs_lib/CryNode.h b/src/cryfs_lib/CryNode.h index c0109498..ae5a21aa 100644 --- a/src/cryfs_lib/CryNode.h +++ b/src/cryfs_lib/CryNode.h @@ -19,6 +19,7 @@ public: void stat(struct ::stat *result) const; void access(int mask) const; + void rename(const bf::path &to); protected: bf::path base_path() const; @@ -27,7 +28,7 @@ protected: private: CryDevice *const _device; - const bf::path _path; + bf::path _path; DISALLOW_COPY_AND_ASSIGN(CryNode); };