Skip to content

Commit

Permalink
recover from filesystem exception when dumping
Browse files Browse the repository at this point in the history
  • Loading branch information
diamante0018 committed Jan 11, 2025
1 parent 5d69473 commit 315eb76
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
13 changes: 11 additions & 2 deletions src/ObjWriting/Dumping/AssetDumpingContext.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "AssetDumpingContext.h"

#include <filesystem>
#include <format>
#include <fstream>

AssetDumpingContext::AssetDumpingContext()
Expand All @@ -15,13 +16,21 @@ std::unique_ptr<std::ostream> AssetDumpingContext::OpenAssetFile(const std::stri

auto assetFileFolder(assetFilePath);
assetFileFolder.replace_filename("");
create_directories(assetFileFolder);

std::error_code ec;
std::filesystem::create_directories(assetFileFolder, ec);

if (ec)
{
std::cerr << std::format("Failed to create folder '{}'. Asset '{}' won't be dumped\n", assetFilePath.string(), fileName);
return nullptr;
}

auto file = std::make_unique<std::ofstream>(assetFilePath, std::fstream::out | std::fstream::binary);

if (!file->is_open())
{
std::cout << "Failed to open file '" << assetFilePath.string() << "' to dump asset '" << fileName << "'\n";
std::cerr << std::format("Failed to open file '{}' to dump asset '{}'\n", assetFilePath.string(), fileName);
return nullptr;
}

Expand Down
3 changes: 2 additions & 1 deletion src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperRawFile.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "AssetDumperRawFile.h"

#include <format>
#include <stdexcept>
#include <zlib.h>

Expand Down Expand Up @@ -49,7 +50,7 @@ void AssetDumperRawFile::DumpAsset(AssetDumpingContext& context, XAssetInfo<RawF

if (ret < 0)
{
printf("Inflate failed for dumping rawfile '%s'\n", rawFile->name);
std::cerr << std::format("Inflate failed when attempting to dump rawfile '{}'\n", rawFile->name);
inflateEnd(&zs);
return;
}
Expand Down
3 changes: 2 additions & 1 deletion src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperRawFile.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "AssetDumperRawFile.h"

#include <format>
#include <stdexcept>
#include <zlib.h>

Expand Down Expand Up @@ -49,7 +50,7 @@ void AssetDumperRawFile::DumpAsset(AssetDumpingContext& context, XAssetInfo<RawF

if (ret < 0)
{
std::cerr << "Inflate failed when attempting to dump rawfile " << rawFile->name << "\n";
std::cerr << std::format("Inflate failed when attempting to dump rawfile '{}'\n", rawFile->name);
inflateEnd(&zs);
return;
}
Expand Down

0 comments on commit 315eb76

Please sign in to comment.