| 39 | FileWriter::FileWriter(const char *_filename) : mFilename(_filename) {} |
| 40 | |
| 41 | void FileWriter::writeFile(Buffer* filemap, uint32_t size) { |
| 42 | if (size > filemap->getSize()) |
| 43 | size = filemap->getSize(); |
| 44 | #if defined(__unix__) || defined(__APPLE__) |
| 45 | size_t bytes_written = 0; |
| 46 | FILE *file; |
| 47 | |
| 48 | file = fopen(mFilename, "wb"); |
| 49 | if (file == nullptr) |
| 50 | ThrowFIE("Could not open file."); |
| 51 | |
| 52 | const auto* const src = filemap->getData(0, filemap->getSize()); |
| 53 | bytes_written = fwrite(src, 1, size != 0 ? size : filemap->getSize(), file); |
| 54 | fclose(file); |
| 55 | if (size != bytes_written) { |
| 56 | ThrowFIE("Could not write file."); |
| 57 | } |
| 58 | |
| 59 | #else // __unix__ |
| 60 | auto wFileName = widenFileName(mFilename); |
| 61 | HANDLE file_h; // File handle |
| 62 | file_h = |
| 63 | CreateFileW(wFileName.data(), GENERIC_WRITE, FILE_SHARE_WRITE, nullptr, |
| 64 | CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, nullptr); |
| 65 | if (file_h == INVALID_HANDLE_VALUE) { |
| 66 | ThrowFIE("Could not open file."); |
| 67 | } |
| 68 | |
| 69 | DWORD bytes_written; |
| 70 | if (!WriteFile(file_h, filemap->getData(0, filemap->getSize()), |
| 71 | size ? size : filemap->getSize(), &bytes_written, nullptr)) { |
| 72 | CloseHandle(file_h); |
| 73 | ThrowFIE("Could not read file."); |
| 74 | } |
| 75 | CloseHandle(file_h); |
| 76 | |
| 77 | #endif // __unix__ |
| 78 | } |
| 79 | |
| 80 | } // namespace rawspeed |
nothing calls this directly
no test coverage detected