| 113 | } |
| 114 | |
| 115 | void AutoFile::write_buffer(std::span<std::byte> src) |
| 116 | { |
| 117 | if (!m_file) throw std::ios_base::failure("AutoFile::write_buffer: file handle is nullptr"); |
| 118 | if (m_obfuscation) { |
| 119 | if (!m_position) throw std::ios_base::failure("AutoFile::write_buffer: obfuscation position unknown"); |
| 120 | m_obfuscation(src, *m_position); // obfuscate in-place |
| 121 | } |
| 122 | if (std::fwrite(src.data(), 1, src.size(), m_file) != src.size()) { |
| 123 | throw std::ios_base::failure("AutoFile::write_buffer: write failed"); |
| 124 | } |
| 125 | m_was_written = true; |
| 126 | if (m_position) *m_position += src.size(); |
| 127 | } |
| 128 | |
| 129 | bool AutoFile::Commit() |
| 130 | { |