diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-14 17:18:08 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-14 17:18:08 +0200 |
commit | b101481315dec728b7c4fb466322ac861cd6dcf2 (patch) | |
tree | 8387f26d7a226284f698d1c94b658ea697199db3 /modules/remote-filesystem/c++/transfer.hpp | |
parent | fb6cd9ca585c4194a5b88053f6861151919c02df (diff) |
wip
Diffstat (limited to 'modules/remote-filesystem/c++/transfer.hpp')
-rw-r--r-- | modules/remote-filesystem/c++/transfer.hpp | 17 |
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; } |