diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-03-23 17:09:09 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-03-23 17:09:36 +0300 |
commit | ab4307aa0868f2d8389cc0dd500eff38909b08f1 (patch) | |
tree | 768b5daf3e0fe3d677d4aeec4e25f141d48fca0b /intern/opencolorio/ocio_impl.cc | |
parent | 6a4967ca6e6c6fd2a82c8af2549337e49d32756d (diff) |
Fix T47869: OpenColorIO Error with unicode path to config file under Windows
Diffstat (limited to 'intern/opencolorio/ocio_impl.cc')
-rw-r--r-- | intern/opencolorio/ocio_impl.cc | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/intern/opencolorio/ocio_impl.cc b/intern/opencolorio/ocio_impl.cc index 82536a74159..5c05d18ac48 100644 --- a/intern/opencolorio/ocio_impl.cc +++ b/intern/opencolorio/ocio_impl.cc @@ -25,6 +25,7 @@ * ***** END GPL LICENSE BLOCK ***** */ +#include <fstream> #include <iostream> #include <sstream> #include <string.h> @@ -55,6 +56,19 @@ using namespace OCIO_NAMESPACE; # define __func__ __FUNCTION__ #endif +#ifdef _WIN32 +# ifndef NOGDI +# define NOGDI +# endif +# ifndef NOMINMAX +# define NOMINMAX +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include <windows.h> +#endif + static void OCIO_reportError(const char *err) { std::cerr << "OpenColorIO Error: " << err << std::endl; @@ -121,7 +135,26 @@ OCIO_ConstConfigRcPtr *OCIOImpl::configCreateFromFile(const char *filename) ConstConfigRcPtr *config = OBJECT_GUARDED_NEW(ConstConfigRcPtr); try { - *config = Config::CreateFromFile(filename); +#ifdef _WIN32 + const int length_mb = strlen(filename); + const int length_wc = MultiByteToWideChar(CP_UTF8, + 0, + filename, + length_mb, + NULL, + 0); + std::wstring wfilename(length_wc, 0); + MultiByteToWideChar(CP_UTF8, + 0, + filename, + length_mb, + &wfilename[0], + length_wc); + std::fstream stream(wfilename); +#else + std::fstream stream(filename); +#endif + *config = Config::CreateFromStream(stream); if (*config) return (OCIO_ConstConfigRcPtr *) config; @@ -622,7 +655,7 @@ void OCIOImpl::matrixTransformScale(float *m44, float *offset4, const float *sca const char *OCIOImpl::getVersionString(void) { - return GetVersion(); + return OCIO_NAMESPACE::GetVersion(); } int OCIOImpl::getVersionHex(void) |