summaryrefslogtreecommitdiff
path: root/netfs/fuse/fuseFiles.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netfs/fuse/fuseFiles.cpp')
-rw-r--r--netfs/fuse/fuseFiles.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/netfs/fuse/fuseFiles.cpp b/netfs/fuse/fuseFiles.cpp
index 8014732..3d23338 100644
--- a/netfs/fuse/fuseFiles.cpp
+++ b/netfs/fuse/fuseFiles.cpp
@@ -4,6 +4,7 @@
#include <cstring>
#include <entCache.h>
#include <mutex>
+#include <numeric.h>
namespace NetFS {
FuseApp::OpenFile::WriteState::WriteState() : future(promise.get_future().share()) { }
@@ -67,7 +68,7 @@ namespace NetFS {
FuseApp::create(const char * p, mode_t m, struct fuse_file_info * fi)
{
try {
- auto remote = volume->create(reqEnv(), p, fi->flags, m);
+ auto remote = volume->create(reqEnv(), p, fi->flags, safe {m});
setProxy<OpenFilePtr>(fi->fh, remote, p, fi->flags);
return 0;
}
@@ -143,20 +144,20 @@ namespace NetFS {
FuseApp::read(const char *, char * buf, size_t s, off_t o, struct fuse_file_info * fi)
{
try {
- auto cpy = [buf](const auto && data) {
+ auto cpy = [buf](const auto && data) -> int {
memcpy(buf, &data.front(), data.size());
- return data.size();
+ return safe {data.size()};
};
auto of = getProxy<OpenFilePtr>(fi->fh);
auto remote = of->remote;
if (fcr->Async) {
auto p = waitOnWriteRangeAndThen<std::future<Buffer>>(s, o, of, [o, s, &remote](const auto &) {
- return remote->readAsync(o, s);
+ return remote->readAsync(o, safe {s});
});
return cpy(p.get());
}
else {
- return cpy(remote->read(o, s));
+ return cpy(remote->read(o, safe {s}));
}
}
catch (SystemError & e) {
@@ -191,9 +192,9 @@ namespace NetFS {
});
}
else {
- remote->write(o, s, Buffer(buf, buf + s));
+ remote->write(o, safe {s}, Buffer(buf, buf + s));
}
- return s;
+ return safe {s};
}
catch (SystemError & e) {
return -e.syserrno;
@@ -211,7 +212,7 @@ namespace NetFS {
auto remote_out = of_out->remote;
of_in->wait();
of_out->wait();
- return remote_in->copyrange(remote_out, offset_in, offset_out, size, flags);
+ return remote_in->copyrange(remote_out, offset_in, offset_out, safe {size}, flags);
}
catch (SystemError & e) {
return -e.syserrno;