mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Improve AbstractXMLParser error reporting (#330)
The more detailed error message that used to go only to Livelog.txt is now also displayed in the ingame error screen, providing more helpful error message to players when making bug reports/asking for help
This commit is contained in:
+7
-5
@@ -438,11 +438,13 @@ BOOLEAN LoadExternalGameplayData(STR directoryName, BOOLEAN isMultiplayer)
|
||||
if (isMultiplayer == false)
|
||||
{
|
||||
using namespace LogicalBodyTypes;
|
||||
SGP_THROW_IFFALSE(Layers::Instance().LoadFromFile(directoryName, LBT_LAYERSFILENAME), LBT_LAYERSFILENAME);
|
||||
SGP_THROW_IFFALSE(PaletteDB::Instance().LoadFromFile(directoryName, LBT_PALETTESFILENAME), LBT_PALETTESFILENAME);
|
||||
SGP_THROW_IFFALSE(SurfaceDB::Instance().LoadFromFile(directoryName, LBT_ANIMSURFACESFILENAME), LBT_ANIMSURFACESFILENAME);
|
||||
SGP_THROW_IFFALSE(FilterDB::Instance().LoadFromFile(directoryName, LBT_FILTERSFILENAME), LBT_FILTERSFILENAME);
|
||||
SGP_THROW_IFFALSE(BodyTypeDB::Instance().LoadFromFile(directoryName, LBT_BODYTYPESFILENAME), LBT_BODYTYPESFILENAME);
|
||||
CHAR8 errorBuf[512]{"Failed loading LogicalBodyTypes external data!"};
|
||||
|
||||
SGP_THROW_IFFALSE(Layers::Instance().LoadFromFile(directoryName, LBT_LAYERSFILENAME, errorBuf), errorBuf);
|
||||
SGP_THROW_IFFALSE(PaletteDB::Instance().LoadFromFile(directoryName, LBT_PALETTESFILENAME, errorBuf), errorBuf);
|
||||
SGP_THROW_IFFALSE(SurfaceDB::Instance().LoadFromFile(directoryName, LBT_ANIMSURFACESFILENAME, errorBuf), errorBuf);
|
||||
SGP_THROW_IFFALSE(FilterDB::Instance().LoadFromFile(directoryName, LBT_FILTERSFILENAME, errorBuf), errorBuf);
|
||||
SGP_THROW_IFFALSE(BodyTypeDB::Instance().LoadFromFile(directoryName, LBT_BODYTYPESFILENAME, errorBuf), errorBuf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,14 +24,15 @@ AbstractXMLLoader::ParseData* AbstractXMLLoader::MakeParseData(XML_Parser* parse
|
||||
return new ParseData(parser);
|
||||
}
|
||||
|
||||
bool AbstractXMLLoader::LoadFromFile(const char* directoryName, const char* fileName) {
|
||||
bool AbstractXMLLoader::LoadFromFile(const char* directoryName, const char* fileName, CHAR8* errorBuf) {
|
||||
HWFILE hFile;
|
||||
UINT32 uiBytesRead;
|
||||
UINT32 uiFSize;
|
||||
CHAR8* lpcBuffer;
|
||||
char fileNameFull[MAX_PATH + 1];
|
||||
if (strlen(fileName) + strlen(directoryName) >= MAX_PATH) {
|
||||
LiveMessage("Can't load file. Concatinated filename too long for buffer!");
|
||||
sprintf(errorBuf, "Can't load file %s%s, Concatenated filename too long for buffer!", directoryName, fileName);
|
||||
LiveMessage(errorBuf);
|
||||
return false;
|
||||
}
|
||||
SetDirectoryName(directoryName);
|
||||
@@ -46,12 +47,14 @@ bool AbstractXMLLoader::LoadFromFile(const char* directoryName, const char* file
|
||||
DebugMsg(TOPIC_JA2, DBG_LEVEL_3, msg.c_str());
|
||||
hFile = FileOpen(fileNameFull, FILE_ACCESS_READ, FALSE);
|
||||
if (!hFile) {
|
||||
sprintf(errorBuf, "Can't open %s", fileNameFull);
|
||||
delete data;
|
||||
return false;
|
||||
}
|
||||
uiFSize = FileGetSize(hFile);
|
||||
lpcBuffer = (CHAR8*)MemAlloc(uiFSize + 1);
|
||||
if (!FileRead(hFile, lpcBuffer, uiFSize, &uiBytesRead)) {
|
||||
sprintf(errorBuf, "Error reading %s to buffer", fileNameFull);
|
||||
MemFree(lpcBuffer);
|
||||
delete data;
|
||||
return false;
|
||||
@@ -72,7 +75,6 @@ bool AbstractXMLLoader::LoadFromFile(const char* directoryName, const char* file
|
||||
|
||||
try {
|
||||
if (!XML_Parse(parser, lpcBuffer, uiFSize, TRUE)) {
|
||||
CHAR8 errorBuf[512];
|
||||
sprintf(errorBuf, "XML Parser Error in %s[%d]: %s", fileNameFull, XML_GetCurrentLineNumber(parser), XML_ErrorString(XML_GetErrorCode(parser)));
|
||||
LiveMessage(errorBuf);
|
||||
MemFree(lpcBuffer);
|
||||
@@ -80,7 +82,6 @@ bool AbstractXMLLoader::LoadFromFile(const char* directoryName, const char* file
|
||||
return false;
|
||||
}
|
||||
} catch (XMLParseException e) {
|
||||
CHAR8 errorBuf[512];
|
||||
sprintf(errorBuf, "XML Parser Exception in %s[%d]: %s", fileNameFull, e._LINE, e.what());
|
||||
LiveMessage(errorBuf);
|
||||
MemFree(lpcBuffer);
|
||||
|
||||
@@ -55,7 +55,7 @@ private:
|
||||
public:
|
||||
AbstractXMLLoader(XML_StartElementHandler startHandler, XML_EndElementHandler endHandler, XML_CharacterDataHandler charHandler, ParseDataFactoryFunc parseDataFactF = MakeParseData);
|
||||
~AbstractXMLLoader(void);
|
||||
bool LoadFromFile(const char* directoryName, const char* fileName);
|
||||
bool LoadFromFile(const char* directoryName, const char* fileName, CHAR8* errorBuf);
|
||||
const char* GetFileName();
|
||||
const char* GetDirectoryName();
|
||||
void SetFileName(const char* fileName);
|
||||
|
||||
Reference in New Issue
Block a user