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

This commit is contained in:
Sergey Sharybin 2016-03-23 15:09:09 +01:00
parent 6a4967ca6e
commit ab4307aa08
Notes: blender-bot 2023-02-14 08:04:19 +01:00
Referenced by commit c1095c7a9f, Revert "Fix T47869: OpenColorIO Error with unicode path to config file under Windows"
Referenced by issue #47869, OpenColorIO Error with unicode path to config file under Windows
2 changed files with 35 additions and 13 deletions

View File

@ -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)

View File

@ -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
}
}