summaryrefslogtreecommitdiffstats
path: root/unix/tclUnixInit.c
diff options
context:
space:
mode:
Diffstat (limited to 'unix/tclUnixInit.c')
-rw-r--r--unix/tclUnixInit.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/unix/tclUnixInit.c b/unix/tclUnixInit.c
index 44d486e..72d1cda 100644
--- a/unix/tclUnixInit.c
+++ b/unix/tclUnixInit.c
@@ -7,7 +7,7 @@
* Copyright (c) 1999 by Scriptics Corporation.
* All rights reserved.
*
- * RCS: @(#) $Id: tclUnixInit.c,v 1.25 2001/11/16 20:55:40 hobbs Exp $
+ * RCS: @(#) $Id: tclUnixInit.c,v 1.26 2001/11/16 23:40:41 hobbs Exp $
*/
#include "tclInt.h"
@@ -52,10 +52,12 @@ static char defaultLibraryDir[sizeof(TCL_LIBRARY)+200] = TCL_LIBRARY;
static char pkgPath[sizeof(TCL_PACKAGE_PATH)+200] = TCL_PACKAGE_PATH;
-#ifndef HAVE_LANGINFO
/*
* The following table is used to map from Unix locale strings to
- * encoding files.
+ * encoding files. If HAVE_LANGINFO is defined, then this is a fallback
+ * table when the result from nl_langinfo isn't a recognized encoding.
+ * Otherwise this is the first list checked for a mapping from env
+ * encoding to Tcl encoding name.
*/
typedef struct LocaleTable {
@@ -64,6 +66,9 @@ typedef struct LocaleTable {
} LocaleTable;
static CONST LocaleTable localeTable[] = {
+#ifdef HAVE_LANGINFO
+ {"gb2312-1980", "gb2312"},
+#else
{"ja_JP.SJIS", "shiftjis"},
{"ja_JP.EUC", "euc-jp"},
{"ja_JP.eucJP", "euc-jp"},
@@ -98,10 +103,9 @@ static CONST LocaleTable localeTable[] = {
{"ru_SU", "iso8859-5"},
{"zh", "cp936"},
-
+#endif /* !HAVE_LANGINFO */
{NULL, NULL}
};
-#endif /* !HAVE_LANGINFO */
/*
*---------------------------------------------------------------------------
@@ -409,6 +413,7 @@ TclpSetInitialEncodings()
*/
#ifdef HAVE_LANGINFO
Tcl_DString ds;
+ int code;
setlocale(LC_CTYPE,"");
Tcl_DStringInit(&ds);
@@ -437,7 +442,17 @@ TclpSetInitialEncodings()
Tcl_DStringSetLength(&ds, 0);
Tcl_DStringAppend(&ds, "iso8859-1", -1);
}
- if (Tcl_SetSystemEncoding(NULL, encoding) != TCL_OK) {
+ code = Tcl_SetSystemEncoding(NULL, encoding);
+ if (code != TCL_OK) {
+ for (i = 0; localeTable[i].lang != NULL; i++) {
+ if (strcmp(localeTable[i].lang, encoding) == 0) {
+ encoding = localeTable[i].encoding;
+ code = Tcl_SetSystemEncoding(NULL, encoding);
+ break;
+ }
+ }
+ }
+ if (code != TCL_OK) {
Tcl_Channel errChannel = Tcl_GetStdChannel(TCL_STDERR);
if (errChannel) {
char msg[100];