Browse Source

sceneconverter: don't load the importer plugin for --info-converter.

If it crashes or does some other shit, it'll cause the tool to not work
at all. If it fails to load due to whatever other issue, it'll spam the
output for no reason.
pull/617/head
Vladimír Vondruš 3 years ago
parent
commit
e9aa7094c9
  1. 2
      src/Magnum/SceneTools/Test/SceneConverterTest.cpp
  2. 31
      src/Magnum/SceneTools/sceneconverter.cpp

2
src/Magnum/SceneTools/Test/SceneConverterTest.cpp

@ -55,7 +55,7 @@ struct SceneConverterTest: TestSuite::Tester {
using namespace Containers::Literals;
const struct {
const char* name;
TestSuite::TestCaseDescriptionSourceLocation name;
Containers::Array<Containers::String> args;
const char* requiresImporter;
const char* requiresConverter;

31
src/Magnum/SceneTools/sceneconverter.cpp

@ -564,18 +564,19 @@ well, the IDs reference attributes of the first mesh.)")
Utility::Path::join(args.value("plugin-dir"), Utility::Path::split(Trade::AbstractSceneConverter::pluginSearchPaths().back()).second())};
converterManager.registerExternalManager(imageConverterManager);
Containers::Pointer<Trade::AbstractImporter> importer = importerManager.loadAndInstantiate(args.value("importer"));
if(!importer) {
Debug{} << "Available importer plugins:" << ", "_s.join(importerManager.aliasList());
return 1;
}
/* Set options, if passed */
if(args.isSet("verbose")) importer->addFlags(Trade::ImporterFlag::Verbose);
Implementation::setOptions(*importer, "AnySceneImporter", args.value("importer-options"));
/* Print plugin info, if requested */
/** @todo these all duplicate plugin loading & option setting, move to
some helpers (shared among all command-line tools)? */
if(args.isSet("info-importer")) {
Containers::Pointer<Trade::AbstractImporter> importer = importerManager.loadAndInstantiate(args.value("importer"));
if(!importer) {
Debug{} << "Available importer plugins:" << ", "_s.join(importerManager.aliasList());
return 1;
}
/* Set options, if passed */
if(args.isSet("verbose")) importer->addFlags(Trade::ImporterFlag::Verbose);
Implementation::setOptions(*importer, "AnySceneImporter", args.value("importer-options"));
Trade::Implementation::printImporterInfo(useColor, *importer);
return 0;
}
@ -608,6 +609,16 @@ well, the IDs reference attributes of the first mesh.)")
return 0;
}
Containers::Pointer<Trade::AbstractImporter> importer = importerManager.loadAndInstantiate(args.value("importer"));
if(!importer) {
Debug{} << "Available importer plugins:" << ", "_s.join(importerManager.aliasList());
return 1;
}
/* Set options, if passed */
if(args.isSet("verbose")) importer->addFlags(Trade::ImporterFlag::Verbose);
Implementation::setOptions(*importer, "AnySceneImporter", args.value("importer-options"));
/* Wow, C++, you suck. This implicitly initializes to random shit?!
Also, because of addSupportedImporterContents() it's not really possible

Loading…
Cancel
Save