Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-03-23 17:09:09 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-03-23 17:09:36 +0300
commitab4307aa0868f2d8389cc0dd500eff38909b08f1 (patch)
tree768b5daf3e0fe3d677d4aeec4e25f141d48fca0b /intern/opencolorio
parent6a4967ca6e6c6fd2a82c8af2549337e49d32756d (diff)
Fix T47869: OpenColorIO Error with unicode path to config file under Windows
Diffstat (limited to 'intern/opencolorio')
-rw-r--r--intern/opencolorio/ocio_impl.cc37
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)