diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-11-23 12:07:48 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-11-23 12:07:48 +0000 |
commit | 5b72f07eaa0b43c5d4654a4685676f36076de221 (patch) | |
tree | 406044d253bfcdf787988e5c4ad65a4d195e642c /netfs/daemon | |
parent | First cut migration to fuse3 (diff) | |
download | netfs-5b72f07eaa0b43c5d4654a4685676f36076de221.tar.bz2 netfs-5b72f07eaa0b43c5d4654a4685676f36076de221.tar.xz netfs-5b72f07eaa0b43c5d4654a4685676f36076de221.zip |
Add support for rename flags
Diffstat (limited to 'netfs/daemon')
-rw-r--r-- | netfs/daemon/daemonVolume.cpp | 7 | ||||
-rw-r--r-- | netfs/daemon/daemonVolume.h | 2 |
2 files changed, 6 insertions, 3 deletions
diff --git a/netfs/daemon/daemonVolume.cpp b/netfs/daemon/daemonVolume.cpp index bdd899b..6a3c7fe 100644 --- a/netfs/daemon/daemonVolume.cpp +++ b/netfs/daemon/daemonVolume.cpp @@ -113,12 +113,15 @@ VolumeServer::link(const NetFS::ReqEnv re, std::string path1, std::string path2, } void -VolumeServer::rename(const NetFS::ReqEnv re, std::string from, std::string to, const Ice::Current &) +VolumeServer::rename(const NetFS::ReqEnv re, std::string from, std::string to, const Ice::optional<Ice::Int> flags, const Ice::Current &) { ModeCheck mc(re, root, userLookup, groupLookup); errno = 0; - std::filesystem::path f(resolvePath(std::move(from))); std::filesystem::path t(resolvePath(std::move(to))); + if (flags && *flags == RENAME_NOREPLACE && ::access(t.c_str(), F_OK) == 0) { + throw NetFS::SystemError(EEXIST); + } + std::filesystem::path f(resolvePath(std::move(from))); mc.AssertWriteParent(f); mc.AssertWriteParent(t); if (::rename(f.c_str(), t.c_str()) != 0) { diff --git a/netfs/daemon/daemonVolume.h b/netfs/daemon/daemonVolume.h index 770cada..235adf4 100644 --- a/netfs/daemon/daemonVolume.h +++ b/netfs/daemon/daemonVolume.h @@ -30,7 +30,7 @@ class VolumeServer : public NetFS::Volume { virtual void mknod(const NetFS::ReqEnv, std::string path, Ice::Int mode, Ice::Int dev, const Ice::Current&) override; virtual void symlink(const NetFS::ReqEnv, const std::string path1, const std::string path2, const Ice::Current&) override; virtual void link(const NetFS::ReqEnv, std::string path1, std::string path2, const Ice::Current&) override; - virtual void rename(const NetFS::ReqEnv, std::string path1, const std::string path2, const Ice::Current&) override; + virtual void rename(const NetFS::ReqEnv, std::string path1, const std::string path2, const Ice::optional<Ice::Int>, const Ice::Current&) override; virtual std::string readlink(const NetFS::ReqEnv, std::string path, const Ice::Current&) override; virtual void chmod(const NetFS::ReqEnv, std::string path, Ice::Int mode, const Ice::Current&) override; virtual void chown(const NetFS::ReqEnv, std::string path, Ice::Int uid, Ice::Int gid, const Ice::Current&) override; |