summaryrefslogtreecommitdiff
path: root/modules/remote-filesystem/c++/transfer.hpp
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-14 17:18:08 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-14 17:18:08 +0200
commitb101481315dec728b7c4fb466322ac861cd6dcf2 (patch)
tree8387f26d7a226284f698d1c94b658ea697199db3 /modules/remote-filesystem/c++/transfer.hpp
parentfb6cd9ca585c4194a5b88053f6861151919c02df (diff)
wip
Diffstat (limited to 'modules/remote-filesystem/c++/transfer.hpp')
-rw-r--r--modules/remote-filesystem/c++/transfer.hpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/modules/remote-filesystem/c++/transfer.hpp b/modules/remote-filesystem/c++/transfer.hpp
index 1e42cf5..22a35a8 100644
--- a/modules/remote-filesystem/c++/transfer.hpp
+++ b/modules/remote-filesystem/c++/transfer.hpp
@@ -7,6 +7,8 @@
#include <fstream>
+#include <cstring>
+
namespace saw {
template<typename Schema, typename Encoding>
class data_server<Schema, Encoding, rmt::File> final : public i_data_server<rmt::File> {
@@ -41,7 +43,7 @@ public:
return generate_invalid_id_error();
}
- std::basic_fstream<uint8_t> s{addr_.get_path(), s.binary | s.out};
+ std::basic_ofstream<uint8_t> s{addr_.get_path(), s.binary | s.out | s.trunc};
if(!s.is_open()){
return make_error<err::not_found>("Couldn't open file");
}
@@ -50,9 +52,16 @@ public:
buffer_view buff_v{buff};
while(buff_v.read_segment_length() > 0u){
s.write(&buff_v.read(), buff_v.read_segment_length());
-
buff_v.read_advance(buff_v.read_segment_length());
}
+ s.flush();
+ if(s.bad()){
+ return make_error<err::invalid_state>("Stream failed to write.");
+ }
+
+ if(s.fail()){
+ return make_error<err::invalid_state>("Stream encountered non-integer data.");
+ }
return make_void();
}
@@ -76,13 +85,15 @@ public:
}
data<Schema, Encoding> dat{heap<array_buffer>(1u)};
+
std::basic_fstream<uint8_t> s{addr_.get_path(), s.binary | s.in};
if(!s.is_open()){
return make_error<err::not_found>("Couldn't open file");
}
uint8_t ele{};
while(s.readsome(&ele, 1u) > 0u){
- auto err = dat.get_buffer().push(ele);
+
+ auto err = dat.get_buffer().push(ele,1u);
if(err.failed()){
return err;
}