diff options
Diffstat (limited to 'netfs/fuse/fuseFiles.cpp')
-rw-r--r-- | netfs/fuse/fuseFiles.cpp | 17 |
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; |