Index: mbutils.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/utils/mb/mbutils.c,v retrieving revision 1.77 diff -c -c -r1.77 mbutils.c *** mbutils.c 19 Jan 2009 15:34:23 -0000 1.77 --- mbutils.c 20 Jan 2009 12:54:33 -0000 *************** *** 837,842 **** --- 837,881 ---- return clen; } + #ifdef WIN32 + static const struct codeset_map { + int encoding; + const char *codeset; + } codeset_map_array[] = { + {PG_UTF8, "UTF-8"}, + {PG_LATIN1, "LATIN1"}, + {PG_LATIN2, "LATIN2"}, + {PG_LATIN3, "LATIN3"}, + {PG_LATIN4, "LATIN4"}, + {PG_ISO_8859_5, "ISO-8859-5"}, + {PG_ISO_8859_6, "ISO_8859-6"}, + {PG_ISO_8859_7, "ISO-8859-7"}, + {PG_ISO_8859_8, "ISO-8859-8"}, + {PG_LATIN5, "LATIN5"}, + {PG_LATIN6, "LATIN6"}, + {PG_LATIN7, "LATIN7"}, + {PG_LATIN8, "LATIN8"}, + {PG_LATIN9, "LATIN-9"}, + {PG_LATIN10, "LATIN10"}, + {PG_KOI8R, "KOI8-R"}, + {PG_WIN1250, "CP1250"}, + {PG_WIN1251, "CP1251"}, + {PG_WIN1252, "CP1252"}, + {PG_WIN1253, "CP1253"}, + {PG_WIN1254, "CP1254"}, + {PG_WIN1255, "CP1255"}, + {PG_WIN1256, "CP1256"}, + {PG_WIN1257, "CP1257"}, + {PG_WIN1258, "CP1258"}, + {PG_WIN866, "CP866"}, + {PG_WIN874, "CP874"}, + {PG_EUC_CN, "EUC-CN"}, + {PG_EUC_JP, "EUC-JP"}, + {PG_EUC_KR, "EUC-KR"}, + {PG_EUC_TW, "EUC-TW"}, + {PG_EUC_JIS_2004, "EUC-JP"}}; + #endif /* WIN32 */ + /* mbcliplen for any single-byte encoding */ static int cliplen(const char *str, int len, int limit) *************** *** 852,857 **** --- 891,898 ---- void SetDatabaseEncoding(int encoding) { + const char *target_codeset = NULL; + if (!PG_VALID_BE_ENCODING(encoding)) elog(ERROR, "invalid database encoding: %d", encoding); *************** *** 873,879 **** */ #ifdef ENABLE_NLS if (encoding == PG_UTF8) ! if (bind_textdomain_codeset(textdomain(NULL), "UTF-8") == NULL) elog(LOG, "bind_textdomain_codeset failed"); #endif } --- 914,935 ---- */ #ifdef ENABLE_NLS if (encoding == PG_UTF8) ! target_codeset = "UTF-8"; ! #ifdef WIN32 ! else ! { ! int i; ! ! for (i = 0; i < sizeof(codeset_map_array) / sizeof(struct codeset_map); i++) ! if (codeset_map_array[i].encoding == encoding) ! { ! target_codeset = codeset_map_array[i].codeset; ! break; ! } ! } ! #endif /* WIN32 */ ! if (target_codeset != NULL) ! if (bind_textdomain_codeset(textdomain(NULL), target_codeset) == NULL) elog(LOG, "bind_textdomain_codeset failed"); #endif }