Merge pull request #19 from Diomendius/linux_port

Improve CMake build and port conversion tools to Linux
This commit is contained in:
Eric Lasota
2024-08-06 23:10:13 -04:00
committed by GitHub
18 changed files with 752 additions and 110 deletions

View File

@@ -31,9 +31,9 @@
#include <stdio.h>
#include <string>
#include <sstream>
#include <utility>
#include <vector>
#include <algorithm>
#include "GpWindows.h"
enum AudioCompressionCodecID
{
@@ -98,6 +98,11 @@ void AppendFmt(std::vector<uint8_t> &array, const char *fmt, ...)
if (resultSize <= 0)
return;
// vsnprintf invalidates the va_list, so we need to
// reinit args so the next call doesn't print garbage.
va_end(args);
va_start(args, fmt);
size_t appendSize = static_cast<size_t>(resultSize);
if (SIZE_MAX == appendSize)
@@ -1466,7 +1471,7 @@ bool DecompressSound(int compressionID, int channelCount, const void *sndData, s
}
}
}
else if (compressionID = AudioCompressionCodecID_SixToOne)
else if (compressionID == AudioCompressionCodecID_SixToOne)
{
if (channelCount != 1)
{
@@ -2427,14 +2432,11 @@ int ConvertSingleFile(const char *resPath, const PortabilityLayer::CombinedTimes
const size_t numRefs = typeList.m_numRefs;
{
char subName[256];
sprintf_s(subName, "%s", resTag.m_id);
PlannedEntry entry;
entry.m_name = subName;
entry.m_name = resTag.m_id;
entry.m_isDirectory = true;
contents.push_back(entry);
contents.push_back(std::move(entry));
}
for (size_t rlIndex = 0; rlIndex < numRefs; rlIndex++)
@@ -2453,14 +2455,15 @@ int ConvertSingleFile(const char *resPath, const PortabilityLayer::CombinedTimes
if (typeList.m_resType == pictTypeID || typeList.m_resType == dateTypeID)
{
char resName[256];
sprintf_s(resName, "%s/%i.bmp", resTag.m_id, static_cast<int>(res.m_resID));
std::string resName = (
std::ostringstream() << resTag.m_id << '/' << res.m_resID << ".bmp"
).str();
if (ContainsName(reservedNames, resName))
if (ContainsName(reservedNames, resName.c_str()))
continue;
PlannedEntry entry;
entry.m_name = resName;
entry.m_name = std::move(resName);
entry.m_comment = resComment;
if (ImportPICT(entry.m_uncompressedContents, resData, resSize, dumpqtDir, res.m_resID))
@@ -2470,14 +2473,15 @@ int ConvertSingleFile(const char *resPath, const PortabilityLayer::CombinedTimes
}
else if (typeList.m_resType == sndTypeID)
{
char resName[256];
sprintf_s(resName, "%s/%i.wav", resTag.m_id, static_cast<int>(res.m_resID));
std::string resName = (
std::ostringstream() << resTag.m_id << '/' << res.m_resID << ".wav"
).str();
if (ContainsName(reservedNames, resName))
if (ContainsName(reservedNames, resName.c_str()))
continue;
PlannedEntry entry;
entry.m_name = resName;
entry.m_name = std::move(resName);
entry.m_comment = resComment;
if (ImportSound(entry.m_uncompressedContents, resData, resSize, res.m_resID))
@@ -2487,14 +2491,15 @@ int ConvertSingleFile(const char *resPath, const PortabilityLayer::CombinedTimes
}
else if (typeList.m_resType == indexStringTypeID)
{
char resName[256];
sprintf_s(resName, "%s/%i.txt", resTag.m_id, static_cast<int>(res.m_resID));
std::string resName = (
std::ostringstream() << resTag.m_id << '/' << res.m_resID << ".txt"
).str();
if (ContainsName(reservedNames, resName))
if (ContainsName(reservedNames, resName.c_str()))
continue;
PlannedEntry entry;
entry.m_name = resName;
entry.m_name = std::move(resName);
entry.m_comment = resComment;
if (ImportIndexedString(entry.m_uncompressedContents, resData, resSize))
@@ -2502,14 +2507,15 @@ int ConvertSingleFile(const char *resPath, const PortabilityLayer::CombinedTimes
}
else if (typeList.m_resType == ditlTypeID)
{
char resName[256];
sprintf_s(resName, "%s/%i.json", resTag.m_id, static_cast<int>(res.m_resID));
std::string resName = (
std::ostringstream() << resTag.m_id << '/' << res.m_resID << ".json"
).str();
if (ContainsName(reservedNames, resName))
if (ContainsName(reservedNames, resName.c_str()))
continue;
PlannedEntry entry;
entry.m_name = resName;
entry.m_name = std::move(resName);
entry.m_comment = resComment;
if (ImportDialogItemTemplate(entry.m_uncompressedContents, resData, resSize))
@@ -2524,15 +2530,16 @@ int ConvertSingleFile(const char *resPath, const PortabilityLayer::CombinedTimes
const IconTypeSpec &iconSpec = iconTypeSpecs[i];
if (typeList.m_resType == iconSpec.m_resTypeID)
{
char resName[256];
sprintf_s(resName, "%s/%i.bmp", resTag.m_id, static_cast<int>(res.m_resID));
std::string resName = (
std::ostringstream() << resTag.m_id << '/' << res.m_resID << ".bmp"
).str();
if (!ContainsName(reservedNames, resName))
if (!ContainsName(reservedNames, resName.c_str()))
{
isIcon = true;
PlannedEntry entry;
entry.m_name = resName;
entry.m_name = std::move(resName);
entry.m_comment = resComment;
if (ImportIcon(entry.m_uncompressedContents, resData, resSize, iconSpec.m_width, iconSpec.m_height, iconSpec.m_bpp))
@@ -2545,15 +2552,16 @@ int ConvertSingleFile(const char *resPath, const PortabilityLayer::CombinedTimes
if (!isIcon)
{
char resName[256];
sprintf_s(resName, "%s/%i.bin", resTag.m_id, static_cast<int>(res.m_resID));
std::string resName = (
std::ostringstream() << resTag.m_id << '/' << res.m_resID << ".bin"
).str();
if (ContainsName(reservedNames, resName))
if (ContainsName(reservedNames, resName.c_str()))
continue;
PlannedEntry entry;
entry.m_name = resName;
entry.m_name = std::move(resName);
entry.m_comment = resComment;
entry.m_uncompressedContents.resize(res.GetSize());