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>2012-10-06 11:03:03 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-10-06 11:03:03 +0400
commitc001bd81a75b60a491ae30947736eea78260827a (patch)
tree8fbd95b09534a885600f9d4294149fd271d0e544 /source/blender
parent950ac472507432339ac0d4b126ac48137bf39e9c (diff)
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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenlib/BLI_fileops.h2
-rw-r--r--source/blender/blenlib/intern/fileops.c28
-rw-r--r--source/blender/imbuf/intern/colormanagement.c13
3 files changed, 31 insertions, 12 deletions
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h
index e8d6336a994..c278370d211 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -96,6 +96,8 @@ void BLI_file_free_lines(struct LinkNode *lines);
# ifndef O_BINARY
# define O_BINARY 0
# endif
+#else
+void BLI_get_short_name(char short_name[256], const char *filename);
#endif
#ifdef __cplusplus
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 453463beaa8..1df904f617a 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -210,6 +210,22 @@ FILE *BLI_fopen(const char *filename, const char *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)
{
gzFile gzfile;
@@ -218,25 +234,15 @@ void *BLI_gzopen(const char *filename, const char *mode)
return 0;
}
else {
- wchar_t short_name_16[256];
char short_name[256];
- int i = 0;
/* xxx Creates file before transcribing the path */
if (mode[0] == 'w')
fclose(ufopen(filename, "a"));
- UTF16_ENCODE(filename);
-
- GetShortPathNameW(filename_16, short_name_16, 256);
-
- for (i = 0; i < 256; i++) {
- short_name[i] = (char)short_name_16[i];
- }
+ BLI_get_short_name(short_name, filename);
gzfile = gzopen(short_name, mode);
-
- UTF16_UN_ENCODE(filename);
}
return gzfile;
diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c
index c7bdd532bb9..37510c10e9a 100644
--- a/source/blender/imbuf/intern/colormanagement.c
+++ b/source/blender/imbuf/intern/colormanagement.c
@@ -51,6 +51,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
+#include "BLI_fileops.h"
#include "BLI_math.h"
#include "BLI_math_color.h"
#include "BLI_path_util.h"
@@ -574,10 +575,20 @@ void colormanagement_init(void)
if (config == NULL) {
configdir = BLI_get_folder(BLENDER_DATAFILES, "colormanagement");
- if (configdir) {
+ 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
}
}