--- gimp-2.6.11/plug-ins/file-psd/psd-save.c 2010-07-03 07:51:59 +0900 +++ gimp-painter--2.6.11/plug-ins/file-psd/psd-save.c 2011-05-08 18:38:49 +0900 @@ -398,34 +398,58 @@ gint padding, const gchar *why) { - guchar len; - gint i; + const gchar *codeset = g_getenv ("PSD_CODESET"); + gchar *str = NULL; + gsize len; + guchar pascal_len; + gint i; + + /* Convert to system codepage from UTF-8 */ + + if (codeset) + str = g_convert (val, -1, codeset, "UTF-8", NULL, &len, NULL); + +#ifdef G_OS_WIN32 + if (! str && + (str = g_win32_locale_filename_from_utf8 (val))) + { + len = strlen (str); + } +#endif + + if (! str) + { + str = g_strdup (val); + len = strlen (val); + } /* Calculate string length to write and limit it to 255 */ - len = (strlen (val) > 255) ? 255 : (guchar) strlen (val); + pascal_len = (len > 255) ? 255 : (guchar) len; /* Perform actual writing */ - if (len != 0) + if (pascal_len != 0) { - write_gchar (fd, len, why); - xfwrite (fd, val, len, why); + write_gchar (fd, pascal_len, why); + xfwrite (fd, str, pascal_len, why); } else { write_gchar (fd, 0, why); } + g_free (str); + /* If total length (length byte + content) is not a multiple of PADDING, add zeros to pad it. */ - len++; /* Add the length field */ + pascal_len++; /* Add the length field */ - if ((len % padding) == 0) + if ((pascal_len % padding) == 0) return; - for (i = 0; i < (padding - (len % padding)); i++) + for (i = 0; i < (padding - (pascal_len % padding)); i++) write_gchar (fd, 0, why); } --- gimp-2.6.11/plug-ins/file-psd/psd-util.c 2010-07-03 07:51:59 +0900 +++ gimp-painter--2.6.11/plug-ins/file-psd/psd-util.c 2011-05-08 18:38:49 +0900 @@ -143,7 +143,7 @@ * string with padding to a multiple of mod_len. */ - gchar *str; + gchar *str = NULL; gchar *pascal_str; gchar null_str = 0x0; guchar pascal_len; @@ -163,7 +163,24 @@ } else { - str = g_locale_from_utf8 (src, -1, NULL, &len, NULL); + const gchar *codeset = g_getenv ("PSD_CODESET"); + + if (codeset) + str = g_convert (src, -1, codeset, "UTF-8", NULL, &len, NULL); + +#ifdef G_OS_WIN32 + if (! str && + (str = g_win32_locale_filename_from_utf8 (src))) + { + len = strlen (str); + } +#endif + + if (! str) + { + str = g_strdup (src); + len = strlen (src); + } if (len > 255) pascal_len = 255; else