check filesystem before trying to open plugin + only report unique directories searched - closes #2131

Conflicts:
	src/datasource_cache.cpp
This commit is contained in:
Dane Springmeyer 2014-02-06 17:05:46 -08:00
parent f6b74ff819
commit 88613fc2ec
2 changed files with 12 additions and 6 deletions

View file

@ -35,6 +35,7 @@
// stl
#include <map>
#include <set>
namespace mapnik {
@ -56,7 +57,7 @@ private:
~datasource_cache();
std::map<std::string,std::shared_ptr<PluginInfo> > plugins_;
bool registered_;
std::vector<std::string> plugin_directories_;
std::set<std::string> plugin_directories_;
};
}

View file

@ -165,8 +165,7 @@ void datasource_cache::register_datasources(std::string const& str)
#ifdef MAPNIK_THREADSAFE
mapnik::scoped_lock lock(mutex_);
#endif
// TODO - only push unique paths
plugin_directories_.push_back(str);
plugin_directories_.insert(str);
if (mapnik::util::exists(str) && mapnik::util::is_directory(str))
{
boost::filesystem::directory_iterator end_itr;
@ -194,9 +193,15 @@ void datasource_cache::register_datasources(std::string const& str)
bool datasource_cache::register_datasource(std::string const& filename)
{
bool success = false;
try
{
if (!mapnik::util::exists(filename))
{
MAPNIK_LOG_ERROR(datasource_cache)
<< "Cannot load '"
<< filename << "' (plugin does not exist)";
return false;
}
std::shared_ptr<PluginInfo> plugin = std::make_shared<PluginInfo>(filename,"datasource_name");
if (plugin->valid())
{
@ -212,7 +217,7 @@ bool datasource_cache::register_datasource(std::string const& filename)
MAPNIK_LOG_DEBUG(datasource_cache)
<< "datasource_cache: Registered="
<< plugin->name();
success = true;
return true;
}
}
else
@ -228,7 +233,7 @@ bool datasource_cache::register_datasource(std::string const& filename)
<< "Exception caught while loading plugin library: "
<< filename << " (" << ex.what() << ")";
}
return success;
return false;
}
}