From 90f08dad7966e35558e5a8cd4948bcf5ed48c7de Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Wed, 9 Dec 2020 23:03:30 +0100 Subject: [PATCH] Handle output file errors correctly --- src/mkdwarfs.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/mkdwarfs.cpp b/src/mkdwarfs.cpp index 3e4f70bc..aca05acb 100644 --- a/src/mkdwarfs.cpp +++ b/src/mkdwarfs.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -607,7 +608,14 @@ int mkdwarfs(int argc, char** argv) { block_compressor bc(compression); block_compressor schema_bc(schema_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, 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; }