Merge pull request #3890 from JC3/jc3-importer-open-error-handling
Fix importer ReadFile issues on file open error or when opening empty filespull/3881/head^2
commit
cdc0bd00ce
|
@ -143,7 +143,13 @@ void Discreet3DSImporter::SetupProperties(const Importer * /*pImp*/) {
|
||||||
// Imports the given file into the given scene structure.
|
// Imports the given file into the given scene structure.
|
||||||
void Discreet3DSImporter::InternReadFile(const std::string &pFile,
|
void Discreet3DSImporter::InternReadFile(const std::string &pFile,
|
||||||
aiScene *pScene, IOSystem *pIOHandler) {
|
aiScene *pScene, IOSystem *pIOHandler) {
|
||||||
StreamReaderLE theStream(pIOHandler->Open(pFile, "rb"));
|
|
||||||
|
auto theFile = pIOHandler->Open(pFile, "rb");
|
||||||
|
if (!theFile) {
|
||||||
|
throw DeadlyImportError("3DS: Could not open ", pFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
StreamReaderLE theStream(theFile);
|
||||||
|
|
||||||
// We should have at least one chunk
|
// We should have at least one chunk
|
||||||
if (theStream.GetRemainingSize() < 16) {
|
if (theStream.GetRemainingSize() < 16) {
|
||||||
|
|
|
@ -268,6 +268,7 @@ void AMFImporter::ParseFile(const std::string &pFile, IOSystem *pIOHandler) {
|
||||||
mXmlParser = new XmlParser();
|
mXmlParser = new XmlParser();
|
||||||
if (!mXmlParser->parse(file.get())) {
|
if (!mXmlParser->parse(file.get())) {
|
||||||
delete mXmlParser;
|
delete mXmlParser;
|
||||||
|
mXmlParser = nullptr;
|
||||||
throw DeadlyImportError("Failed to create XML reader for file" + pFile + ".");
|
throw DeadlyImportError("Failed to create XML reader for file" + pFile + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -671,7 +671,7 @@ void AssbinImporter::ReadBinaryScene(IOStream *stream, aiScene *scene) {
|
||||||
void AssbinImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) {
|
void AssbinImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) {
|
||||||
IOStream *stream = pIOHandler->Open(pFile, "rb");
|
IOStream *stream = pIOHandler->Open(pFile, "rb");
|
||||||
if (nullptr == stream) {
|
if (nullptr == stream) {
|
||||||
return;
|
throw DeadlyImportError("ASSBIN: Could not open ", pFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
// signature
|
// signature
|
||||||
|
|
|
@ -137,7 +137,13 @@ void COBImporter::SetupProperties(const Importer * /*pImp*/) {
|
||||||
// Imports the given file into the given scene structure.
|
// Imports the given file into the given scene structure.
|
||||||
void COBImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) {
|
void COBImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) {
|
||||||
COB::Scene scene;
|
COB::Scene scene;
|
||||||
std::unique_ptr<StreamReaderLE> stream(new StreamReaderLE(pIOHandler->Open(pFile, "rb")));
|
|
||||||
|
auto file = pIOHandler->Open(pFile, "rb");
|
||||||
|
if (!file) {
|
||||||
|
ThrowException("Could not open " + pFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<StreamReaderLE> stream(new StreamReaderLE(file));
|
||||||
|
|
||||||
// check header
|
// check header
|
||||||
char head[32];
|
char head[32];
|
||||||
|
|
|
@ -859,13 +859,13 @@ void IRRImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSy
|
||||||
|
|
||||||
// Check whether we can read from the file
|
// Check whether we can read from the file
|
||||||
if (file.get() == nullptr) {
|
if (file.get() == nullptr) {
|
||||||
throw DeadlyImportError("Failed to open IRR file " + pFile);
|
throw DeadlyImportError("Failed to open IRR file ", pFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construct the irrXML parser
|
// Construct the irrXML parser
|
||||||
XmlParser st;
|
XmlParser st;
|
||||||
if (!st.parse( file.get() )) {
|
if (!st.parse( file.get() )) {
|
||||||
return;
|
throw DeadlyImportError("XML parse error while loading IRR file ", pFile);
|
||||||
}
|
}
|
||||||
pugi::xml_node rootElement = st.getRootNode();
|
pugi::xml_node rootElement = st.getRootNode();
|
||||||
|
|
||||||
|
|
|
@ -135,12 +135,12 @@ void IRRMeshImporter::InternReadFile(const std::string &pFile,
|
||||||
|
|
||||||
// Check whether we can read from the file
|
// Check whether we can read from the file
|
||||||
if (file.get() == NULL)
|
if (file.get() == NULL)
|
||||||
throw DeadlyImportError("Failed to open IRRMESH file " + pFile);
|
throw DeadlyImportError("Failed to open IRRMESH file ", pFile);
|
||||||
|
|
||||||
// Construct the irrXML parser
|
// Construct the irrXML parser
|
||||||
XmlParser parser;
|
XmlParser parser;
|
||||||
if (!parser.parse( file.get() )) {
|
if (!parser.parse( file.get() )) {
|
||||||
return;
|
throw DeadlyImportError("XML parse error while loading IRRMESH file ", pFile);
|
||||||
}
|
}
|
||||||
XmlNode root = parser.getRootNode();
|
XmlNode root = parser.getRootNode();
|
||||||
|
|
||||||
|
|
|
@ -215,7 +215,12 @@ void MS3DImporter :: CollectChildJoints(const std::vector<TempJoint>& joints, ai
|
||||||
void MS3DImporter::InternReadFile( const std::string& pFile,
|
void MS3DImporter::InternReadFile( const std::string& pFile,
|
||||||
aiScene* pScene, IOSystem* pIOHandler)
|
aiScene* pScene, IOSystem* pIOHandler)
|
||||||
{
|
{
|
||||||
StreamReaderLE stream(pIOHandler->Open(pFile,"rb"));
|
|
||||||
|
auto file = pIOHandler->Open(pFile, "rb");
|
||||||
|
if (!file)
|
||||||
|
throw DeadlyImportError("MS3D: Could not open ", pFile);
|
||||||
|
|
||||||
|
StreamReaderLE stream(file);
|
||||||
|
|
||||||
// CanRead() should have done this already
|
// CanRead() should have done this already
|
||||||
char head[10];
|
char head[10];
|
||||||
|
|
|
@ -116,7 +116,13 @@ void NDOImporter::SetupProperties(const Importer* /*pImp*/)
|
||||||
void NDOImporter::InternReadFile( const std::string& pFile,
|
void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
aiScene* pScene, IOSystem* pIOHandler)
|
aiScene* pScene, IOSystem* pIOHandler)
|
||||||
{
|
{
|
||||||
StreamReaderBE reader(pIOHandler->Open( pFile, "rb"));
|
|
||||||
|
auto file = pIOHandler->Open( pFile, "rb");
|
||||||
|
if (!file) {
|
||||||
|
throw DeadlyImportError("Nendo: Could not open ", pFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
StreamReaderBE reader(file);
|
||||||
|
|
||||||
// first 9 bytes are nendo file format ("nendo 1.n")
|
// first 9 bytes are nendo file format ("nendo 1.n")
|
||||||
const char* head = (const char*)reader.GetPtr();
|
const char* head = (const char*)reader.GetPtr();
|
||||||
|
|
|
@ -106,7 +106,12 @@ const aiImporterDesc *Q3DImporter::GetInfo() const {
|
||||||
// Imports the given file into the given scene structure.
|
// Imports the given file into the given scene structure.
|
||||||
void Q3DImporter::InternReadFile(const std::string &pFile,
|
void Q3DImporter::InternReadFile(const std::string &pFile,
|
||||||
aiScene *pScene, IOSystem *pIOHandler) {
|
aiScene *pScene, IOSystem *pIOHandler) {
|
||||||
StreamReaderLE stream(pIOHandler->Open(pFile, "rb"));
|
|
||||||
|
auto file = pIOHandler->Open(pFile, "rb");
|
||||||
|
if (!file)
|
||||||
|
throw DeadlyImportError("Quick3D: Could not open ", pFile);
|
||||||
|
|
||||||
|
StreamReaderLE stream(file);
|
||||||
|
|
||||||
// The header is 22 bytes large
|
// The header is 22 bytes large
|
||||||
if (stream.GetRemainingSize() < 22)
|
if (stream.GetRemainingSize() < 22)
|
||||||
|
|
|
@ -804,7 +804,12 @@ static void ReadScene(SIB *sib, StreamReaderLE *stream) {
|
||||||
// Imports the given file into the given scene structure.
|
// Imports the given file into the given scene structure.
|
||||||
void SIBImporter::InternReadFile(const std::string &pFile,
|
void SIBImporter::InternReadFile(const std::string &pFile,
|
||||||
aiScene *pScene, IOSystem *pIOHandler) {
|
aiScene *pScene, IOSystem *pIOHandler) {
|
||||||
StreamReaderLE stream(pIOHandler->Open(pFile, "rb"));
|
|
||||||
|
auto file = pIOHandler->Open(pFile, "rb");
|
||||||
|
if (!file)
|
||||||
|
throw DeadlyImportError("SIB: Could not open ", pFile);
|
||||||
|
|
||||||
|
StreamReaderLE stream(file);
|
||||||
|
|
||||||
// We should have at least one chunk
|
// We should have at least one chunk
|
||||||
if (stream.GetRemainingSize() < 16)
|
if (stream.GetRemainingSize() < 16)
|
||||||
|
|
|
@ -200,7 +200,7 @@ void XGLImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSy
|
||||||
// parse the XML file
|
// parse the XML file
|
||||||
mXmlParser = new XmlParser;
|
mXmlParser = new XmlParser;
|
||||||
if (!mXmlParser->parse(stream.get())) {
|
if (!mXmlParser->parse(stream.get())) {
|
||||||
return;
|
throw DeadlyImportError("XML parse error while loading XGL file ", pFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
TempScope scope;
|
TempScope scope;
|
||||||
|
|
Loading…
Reference in New Issue