diff --git a/src/core/File.cc b/src/core/File.cc index 3d5097c..3b391cb 100644 --- a/src/core/File.cc +++ b/src/core/File.cc @@ -89,3 +89,27 @@ bool File::read(uint8_t * buf, size_t size) return true; } + +bool File::write(const uint8_t * buf, size_t size) +{ + if (size <= 0) + return true; + + size_t n_bytes_written = 0u; + for (;;) + { + off_t write_size = ::write(m_fd, &buf[n_bytes_written], size - n_bytes_written); + if (write_size <= 0) + break; + n_bytes_written += (size_t)write_size; + if (n_bytes_written >= size) + break; + } + + if (n_bytes_written != size) + { + return false; + } + + return true; +} diff --git a/src/core/File.h b/src/core/File.h index fccffc0..e94291b 100644 --- a/src/core/File.h +++ b/src/core/File.h @@ -13,6 +13,7 @@ public: void close(); size_t get_size(); bool read(uint8_t * buf, size_t size); + bool write(const uint8_t * buf, size_t size); protected: int m_fd;