Temporary fix for #5263 until tinyxml2 handle folders better. When https://github.com/leethomason/tinyxml2/issues/147 is fixed this should be reverted.

This commit is contained in:
Daniel Marjamäki 2013-12-28 21:57:13 +01:00
parent a3a8edc00d
commit ef3d3f2d40
1 changed files with 18 additions and 3 deletions

View File

@ -26,6 +26,21 @@
#include <string>
#include <algorithm>
static tinyxml2::XMLError LoadFile(tinyxml2::XMLDocument &doc, const std::string &path)
{
FILE *f = fopen(path.c_str(),"rb");
if (!f)
return tinyxml2::XML_ERROR_FILE_NOT_FOUND;
// is file ok? if "path" is a folder then reading from it will cause ferror() to return a non-zero value
fgetc(f);
int errorcode = ferror(f);
fclose(f);
// if file is ok, try to load it
return (errorcode == 0) ? doc.LoadFile(path.c_str()) : tinyxml2::XML_ERROR_FILE_NOT_FOUND;
}
Library::Library() : allocid(0)
{
}
@ -47,13 +62,13 @@ bool Library::load(const char exename[], const char path[])
// open file..
tinyxml2::XMLDocument doc;
tinyxml2::XMLError error = doc.LoadFile(path);
tinyxml2::XMLError error = LoadFile(doc,path);
if (error == tinyxml2::XML_ERROR_FILE_NOT_FOUND) {
// failed to open file.. is there no extension?
std::string fullfilename(path);
if (Path::getFilenameExtension(fullfilename) == "") {
fullfilename += ".cfg";
error = doc.LoadFile(fullfilename.c_str());
error = LoadFile(doc,fullfilename);
}
if (error == tinyxml2::XML_ERROR_FILE_NOT_FOUND) {
@ -65,7 +80,7 @@ bool Library::load(const char exename[], const char path[])
#endif
const char *sep = (!cfgfolder.empty() && cfgfolder[cfgfolder.size()-1U]=='/' ? "" : "/");
const std::string filename(cfgfolder + sep + fullfilename);
error = doc.LoadFile(filename.c_str());
error = LoadFile(doc,filename);
}
}