bool datasource_cache::register_datasources(std::string const& dir, bool recurse) { #ifdef MAPNIK_THREADSAFE mapnik::scoped_lock lock(mutex_); #endif if (!mapnik::util::exists(dir)) { return false; } plugin_directories_.insert(dir); if (!mapnik::util::is_directory(dir)) { return register_datasource(dir); } bool success = false; try { boost::filesystem::directory_iterator end_itr; #ifdef _WINDOWS std::wstring wide_dir(mapnik::utf8_to_utf16(dir)); for (boost::filesystem::directory_iterator itr(wide_dir); itr != end_itr; ++itr) { std::string file_name = mapnik::utf16_to_utf8(itr->path().wstring()); #else for (boost::filesystem::directory_iterator itr(dir); itr != end_itr; ++itr) { std::string file_name = itr->path().string(); #endif if (boost::filesystem::is_directory(*itr) && recurse) { if (register_datasources(file_name, true)) { success = true; } } else { std::string base_name = itr->path().filename().string(); if (!boost::algorithm::starts_with(base_name,".") && mapnik::util::is_regular_file(file_name) && is_input_plugin(file_name)) { if (register_datasource(file_name)) { success = true; } } } } } catch (std::exception const& ex) { MAPNIK_LOG_ERROR(datasource_cache) << "register_datasources: " << ex.what(); } return success; }
bool datasource_cache::register_datasources(std::string const& dir, bool recurse) { #ifdef MAPNIK_THREADSAFE std::lock_guard<std::recursive_mutex> lock(instance_mutex_); #endif if (!mapnik::util::exists(dir)) { return false; } plugin_directories_.insert(dir); if (!mapnik::util::is_directory(dir)) { return register_datasource(dir); } bool success = false; try { for (std::string const& file_name : mapnik::util::list_directory(dir)) { if (mapnik::util::is_directory(file_name) && recurse) { if (register_datasources(file_name, true)) { success = true; } } else { std::string base_name = mapnik::util::basename(file_name); if (!boost::algorithm::starts_with(base_name,".") && mapnik::util::is_regular_file(file_name) && is_input_plugin(file_name)) { if (register_datasource(file_name)) { success = true; } } } } } catch (std::exception const& ex) { MAPNIK_LOG_ERROR(datasource_cache) << "register_datasources: " << ex.what(); } return success; }