summaryrefslogtreecommitdiff
path: root/netfs/daemon
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2019-11-23 12:07:48 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2019-11-23 12:07:48 +0000
commit5b72f07eaa0b43c5d4654a4685676f36076de221 (patch)
tree406044d253bfcdf787988e5c4ad65a4d195e642c /netfs/daemon
parentFirst cut migration to fuse3 (diff)
downloadnetfs-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.cpp7
-rw-r--r--netfs/daemon/daemonVolume.h2
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;