Handle output file errors correctly

This commit is contained in:
Marcus Holland-Moritz 2020-12-09 23:03:30 +01:00
parent 15e9972f8b
commit 90f08dad79

View File

@ -21,6 +21,7 @@
#include <algorithm> #include <algorithm>
#include <array> #include <array>
#include <cerrno>
#include <cstdio> #include <cstdio>
#include <cstring> #include <cstring>
#include <ctime> #include <ctime>
@ -607,7 +608,14 @@ int mkdwarfs(int argc, char** argv) {
block_compressor bc(compression); block_compressor bc(compression);
block_compressor schema_bc(schema_compression); block_compressor schema_bc(schema_compression);
block_compressor metadata_bc(metadata_compression); block_compressor metadata_bc(metadata_compression);
std::ofstream ofs(output);
std::ofstream ofs(output, std::ios::binary);
if (ofs.bad() || !ofs.is_open()) {
throw std::runtime_error(
fmt::format("cannot open '{}': {}", output, strerror(errno)));
}
filesystem_writer fsw(ofs, lgr, wg_writer, prog, bc, schema_bc, metadata_bc, filesystem_writer fsw(ofs, lgr, wg_writer, prog, bc, schema_bc, metadata_bc,
mem_limit); mem_limit);
@ -647,6 +655,13 @@ int mkdwarfs(int argc, char** argv) {
} }
} }
ofs.close();
if (ofs.bad()) {
throw std::runtime_error(
fmt::format("failed to close '{}': {}", output, strerror(errno)));
}
return prog.errors > 0; return prog.errors > 0;
} }