[Bf-blender-cvs] [ab4307a] master: Fix T47869: OpenColorIO Error with unicode path to config file under Windows

Sergey Sharybin noreply at git.blender.org
Wed Mar 23 15:09:22 CET 2016


Commit: ab4307aa0868f2d8389cc0dd500eff38909b08f1
Author: Sergey Sharybin
Date:   Wed Mar 23 15:09:09 2016 +0100
Branches: master
https://developer.blender.org/rBab4307aa0868f2d8389cc0dd500eff38909b08f1

Fix T47869: OpenColorIO Error with unicode path to config file under Windows

===================================================================

M	intern/opencolorio/ocio_impl.cc
M	source/blender/imbuf/intern/colormanagement.c

===================================================================

diff --git a/intern/opencolorio/ocio_impl.cc b/intern/opencolorio/ocio_impl.cc
index 82536a7..5c05d18 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)
diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c
index e4e93d3..e383674 100644
--- a/source/blender/imbuf/intern/colormanagement.c
+++ b/source/blender/imbuf/intern/colormanagement.c
@@ -635,18 +635,7 @@ void colormanagement_init(void)
 
 		if (configdir) {
 			BLI_join_dirfile(configfile, sizeof(configfile), configdir, BCM_CONFIG_FILE);
-
-#ifdef WIN32
-			{
-				/* quite a hack to support loading configuration from path with non-acii symbols */
-
-				char short_name[256];
-				BLI_get_short_name(short_name, configfile);
-				config = OCIO_configCreateFromFile(short_name);
-			}
-#else
 			config = OCIO_configCreateFromFile(configfile);
-#endif
 		}
 	}




More information about the Bf-blender-cvs mailing list