Color Management: fixed loading configuration from non-ascii paths
Used the same hack as BLI gzip is using -- calculate short path and send it to OCIO library.
This commit is contained in:
@@ -96,6 +96,8 @@ void BLI_file_free_lines(struct LinkNode *lines);
|
|||||||
# ifndef O_BINARY
|
# ifndef O_BINARY
|
||||||
# define O_BINARY 0
|
# define O_BINARY 0
|
||||||
# endif
|
# endif
|
||||||
|
#else
|
||||||
|
void BLI_get_short_name(char short_name[256], const char *filename);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@@ -210,6 +210,22 @@ FILE *BLI_fopen(const char *filename, const char *mode)
|
|||||||
return ufopen(filename, mode);
|
return ufopen(filename, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BLI_get_short_name(char short_name[256], const char *filename)
|
||||||
|
{
|
||||||
|
wchar_t short_name_16[256];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
UTF16_ENCODE(filename);
|
||||||
|
|
||||||
|
GetShortPathNameW(filename_16, short_name_16, 256);
|
||||||
|
|
||||||
|
for (i = 0; i < 256; i++) {
|
||||||
|
short_name[i] = (char)short_name_16[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
UTF16_UN_ENCODE(filename);
|
||||||
|
}
|
||||||
|
|
||||||
void *BLI_gzopen(const char *filename, const char *mode)
|
void *BLI_gzopen(const char *filename, const char *mode)
|
||||||
{
|
{
|
||||||
gzFile gzfile;
|
gzFile gzfile;
|
||||||
@@ -218,25 +234,15 @@ void *BLI_gzopen(const char *filename, const char *mode)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wchar_t short_name_16[256];
|
|
||||||
char short_name[256];
|
char short_name[256];
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
/* xxx Creates file before transcribing the path */
|
/* xxx Creates file before transcribing the path */
|
||||||
if (mode[0] == 'w')
|
if (mode[0] == 'w')
|
||||||
fclose(ufopen(filename, "a"));
|
fclose(ufopen(filename, "a"));
|
||||||
|
|
||||||
UTF16_ENCODE(filename);
|
BLI_get_short_name(short_name, filename);
|
||||||
|
|
||||||
GetShortPathNameW(filename_16, short_name_16, 256);
|
|
||||||
|
|
||||||
for (i = 0; i < 256; i++) {
|
|
||||||
short_name[i] = (char)short_name_16[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
gzfile = gzopen(short_name, mode);
|
gzfile = gzopen(short_name, mode);
|
||||||
|
|
||||||
UTF16_UN_ENCODE(filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return gzfile;
|
return gzfile;
|
||||||
|
@@ -51,6 +51,7 @@
|
|||||||
#include "MEM_guardedalloc.h"
|
#include "MEM_guardedalloc.h"
|
||||||
|
|
||||||
#include "BLI_blenlib.h"
|
#include "BLI_blenlib.h"
|
||||||
|
#include "BLI_fileops.h"
|
||||||
#include "BLI_math.h"
|
#include "BLI_math.h"
|
||||||
#include "BLI_math_color.h"
|
#include "BLI_math_color.h"
|
||||||
#include "BLI_path_util.h"
|
#include "BLI_path_util.h"
|
||||||
@@ -574,10 +575,20 @@ void colormanagement_init(void)
|
|||||||
if (config == NULL) {
|
if (config == NULL) {
|
||||||
configdir = BLI_get_folder(BLENDER_DATAFILES, "colormanagement");
|
configdir = BLI_get_folder(BLENDER_DATAFILES, "colormanagement");
|
||||||
|
|
||||||
if (configdir) {
|
if (configdir) {
|
||||||
BLI_join_dirfile(configfile, sizeof(configfile), configdir, BCM_CONFIG_FILE);
|
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);
|
config = OCIO_configCreateFromFile(configfile);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user