Revert "Switch to using std::filesystem (#1235)"

This reverts commit cf62ff772f.
Some functions used by this break on macOS before 10.15,
which we want to keep supporting.
This commit is contained in:
ISSOtm
2023-12-30 20:31:13 +01:00
committed by Rangi
parent 93d1d85f94
commit 6b559e99b2
5 changed files with 105 additions and 103 deletions

View File

@@ -7,7 +7,6 @@
#include <assert.h>
#include <cinttypes>
#include <errno.h>
#include <filesystem>
#include <fstream>
#include <optional>
#include <png.h>
@@ -22,10 +21,10 @@
#include "gfx/main.hpp"
static DefaultInitVec<uint8_t> readInto(std::filesystem::path path) {
static DefaultInitVec<uint8_t> readInto(std::string path) {
File file;
if (!file.open(path, std::ios::in | std::ios::binary)) {
fatal("Failed to open \"%s\": %s", file.string(path).c_str(), strerror(errno));
fatal("Failed to open \"%s\": %s", file.c_str(path), strerror(errno));
}
DefaultInitVec<uint8_t> data(128 * 16); // Begin with some room pre-allocated
@@ -78,11 +77,11 @@ void reverse() {
// Check for weird flag combinations
if (!options.output.has_value()) {
if (options.output.empty()) {
fatal("Tile data must be provided when reversing an image!");
}
if (options.allowDedup && !options.tilemap.has_value()) {
if (options.allowDedup && options.tilemap.empty()) {
warning("Tile deduplication is enabled, but no tilemap is provided?");
}
@@ -101,7 +100,7 @@ void reverse() {
}
options.verbosePrint(Options::VERB_LOG_ACT, "Reading tiles...\n");
auto const tiles = readInto(*options.output);
auto const tiles = readInto(options.output);
uint8_t tileSize = 8 * options.bitDepth;
if (tiles.size() % tileSize != 0) {
fatal("Tile data size (%zu bytes) is not a multiple of %" PRIu8 " bytes",
@@ -112,8 +111,8 @@ void reverse() {
size_t nbTileInstances = tiles.size() / tileSize + options.trim; // Image size in tiles
options.verbosePrint(Options::VERB_INTERM, "Read %zu tiles.\n", nbTileInstances);
std::optional<DefaultInitVec<uint8_t>> tilemap;
if (options.tilemap.has_value()) {
tilemap = readInto(*options.tilemap);
if (!options.tilemap.empty()) {
tilemap = readInto(options.tilemap);
nbTileInstances = tilemap->size();
options.verbosePrint(Options::VERB_INTERM, "Read %zu tilemap entries.\n", nbTileInstances);
}
@@ -142,11 +141,10 @@ void reverse() {
{Rgba(0xFFFFFFFF), Rgba(0xAAAAAAFF), Rgba(0x555555FF), Rgba(0x000000FF)}
};
// If a palette file is used as input, it overrides the default colors.
if (options.palettes.has_value()) {
if (!options.palettes.empty()) {
File file;
if (!file.open(*options.palettes, std::ios::in | std::ios::binary)) {
fatal("Failed to open \"%s\": %s", file.string(*options.palettes).c_str(),
strerror(errno));
if (!file.open(options.palettes, std::ios::in | std::ios::binary)) {
fatal("Failed to open \"%s\": %s", file.c_str(options.palettes), strerror(errno));
}
palettes.clear();
@@ -183,8 +181,8 @@ void reverse() {
}
std::optional<DefaultInitVec<uint8_t>> attrmap;
if (options.attrmap.has_value()) {
attrmap = readInto(*options.attrmap);
if (!options.attrmap.empty()) {
attrmap = readInto(options.attrmap);
if (attrmap->size() != nbTileInstances) {
fatal("Attribute map size (%zu tiles) doesn't match image's (%zu)", attrmap->size(),
nbTileInstances);
@@ -230,8 +228,8 @@ void reverse() {
}
std::optional<DefaultInitVec<uint8_t>> palmap;
if (options.palmap.has_value()) {
palmap = readInto(*options.palmap);
if (!options.palmap.empty()) {
palmap = readInto(options.palmap);
if (palmap->size() != nbTileInstances) {
fatal("Palette map size (%zu tiles) doesn't match image's (%zu)", palmap->size(),
nbTileInstances);
@@ -240,14 +238,13 @@ void reverse() {
options.verbosePrint(Options::VERB_LOG_ACT, "Writing image...\n");
File pngFile;
if (!pngFile.open(*options.input, std::ios::out | std::ios::binary)) {
fatal("Failed to create \"%s\": %s", pngFile.string(*options.input).c_str(),
strerror(errno));
if (!pngFile.open(options.input, std::ios::out | std::ios::binary)) {
fatal("Failed to create \"%s\": %s", pngFile.c_str(options.input), strerror(errno));
}
png_structp png = png_create_write_struct(
PNG_LIBPNG_VER_STRING,
const_cast<png_voidp>(static_cast<void const *>(pngFile.string(*options.input).c_str())),
pngError, pngWarning);
const_cast<png_voidp>(static_cast<void const *>(pngFile.c_str(options.input))), pngError,
pngWarning);
if (!png) {
fatal("Couldn't create PNG write struct: %s", strerror(errno));
}