fix boost directory iterator to use wide paths - closes #2273

Conflicts:
	src/font_engine_freetype.cpp
This commit is contained in:
Dane Springmeyer 2014-06-18 16:11:36 -07:00
parent 6572cde97a
commit 8ae1b6da03
2 changed files with 23 additions and 1 deletions

View file

@ -27,6 +27,7 @@
#include <mapnik/params.hpp>
#include <mapnik/plugin.hpp>
#include <mapnik/util/fs.hpp>
#include <mapnik/utils.hpp>
// boost
#include <boost/filesystem/operations.hpp>
@ -169,7 +170,12 @@ void datasource_cache::register_datasources(std::string const& str)
if (mapnik::util::exists(str) && mapnik::util::is_directory(str))
{
boost::filesystem::directory_iterator end_itr;
#ifdef _WINDOWS
std::wstring wide_dir(mapnik::utf8_to_utf16(str));
for (boost::filesystem::directory_iterator itr(wide_dir); itr != end_itr; ++itr)
#else
for (boost::filesystem::directory_iterator itr(str); itr != end_itr; ++itr )
#endif
{
#if (BOOST_FILESYSTEM_VERSION == 3)

View file

@ -26,6 +26,7 @@
#include <mapnik/pixel_position.hpp>
#include <mapnik/text/face.hpp>
#include <mapnik/util/fs.hpp>
#include <mapnik/utils.hpp>
// boost
#include <boost/algorithm/string.hpp>
@ -130,7 +131,11 @@ bool freetype_engine::register_font(std::string const& file_name)
bool freetype_engine::register_font_impl(std::string const& file_name, FT_LibraryRec_ * library)
{
std::ifstream file(file_name.c_str() , std::ios::binary);
#ifdef _WINDOWS
std::ifstream file(mapnik::utf8_to_utf16(file_name), std::ios::binary);
#else
std::ifstream file(file_name.c_str(), std::ios::binary);
#endif
if (!file.good()) {
return false;
}
@ -227,12 +232,23 @@ bool freetype_engine::register_fonts_impl(std::string const& dir, FT_LibraryRec_
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)
{
#if (BOOST_FILESYSTEM_VERSION == 3)
std::string file_name = mapnik::utf16_to_utf8(itr->path().wstring());
#else // v2
std::string file_name = mapnik::utf16_to_utf8(itr->wstring());
#endif
#else
for (boost::filesystem::directory_iterator itr(dir); itr != end_itr; ++itr)
{
#if (BOOST_FILESYSTEM_VERSION == 3)
std::string file_name = itr->path().string();
#else // v2
std::string file_name = itr->string();
#endif
#endif
if (boost::filesystem::is_directory(*itr) && recurse)
{