Index: configure.in =================================================================== RCS file: /home/src/pgsql/repo/pgsql/configure.in,v retrieving revision 1.142 diff -u -r1.142 configure.in --- configure.in 2001/09/22 22:54:32 1.142 +++ configure.in 2001/09/23 19:44:25 @@ -397,21 +397,6 @@ # -# If Tcl is enabled (above) then check for pltcl_utf -# -AC_MSG_CHECKING([whether to build with PL/Tcl with UTF support]) -if test "$with_tcl" = yes; then - PGAC_ARG_BOOL(enable, pltcl-utf, no, - [ --enable-pltcl-utf build PL/Tcl UTF support (if Tcl is enabled)], - [AC_DEFINE([ENABLE_PLTCL_UTF])]) -else - enable_pltcl_utf=no -fi -AC_MSG_RESULT([$enable_pltcl_utf]) -AC_SUBST([enable_pltcl_utf]) - - -# # Optionally build Perl modules (Pg.pm and PL/Perl) # AC_MSG_CHECKING([whether to build Perl modules]) Index: src/include/pg_config.h.in =================================================================== RCS file: /home/src/pgsql/repo/pgsql/src/include/pg_config.h.in,v retrieving revision 1.7 diff -u -r1.7 pg_config.h.in --- src/include/pg_config.h.in 2001/09/22 22:54:32 1.7 +++ src/include/pg_config.h.in 2001/09/23 19:44:47 @@ -89,9 +89,6 @@ /* --enable-pltcl-unknown */ #undef ENABLE_PLTCL_UNKNOWN -/* --enable-pltcl-utf */ -#undef ENABLE_PLTCL_UTF - /* --enable-nls */ #undef ENABLE_NLS Index: src/pl/tcl/pltcl.c =================================================================== RCS file: /home/src/pgsql/repo/pgsql/src/pl/tcl/pltcl.c,v retrieving revision 1.39 diff -u -r1.39 pltcl.c --- src/pl/tcl/pltcl.c 2001/09/06 02:56:32 1.39 +++ src/pl/tcl/pltcl.c 2001/09/23 19:35:35 @@ -59,18 +59,39 @@ #include "catalog/pg_language.h" #include "catalog/pg_type.h" -#if defined(ENABLE_PLTCL_UTF) && TCL_MAJOR_VERSION == 8 \ +#if defined(UNICODE_CONVERSION) && TCL_MAJOR_VERSION == 8 \ && TCL_MINOR_VERSION > 0 -# define UTF_BEGIN do { Tcl_DString _pltcl_ds_tmp -# define UTF_END Tcl_DStringFree(&_pltcl_ds_tmp); } while (0) -# define UTF_U2E(x) (Tcl_UtfToExternalDString(NULL,(x),-1,&_pltcl_ds_tmp)) -# define UTF_E2U(x) (Tcl_ExternalToUtfDString(NULL,(x),-1,&_pltcl_ds_tmp)) -#else /* ENABLE_PLTCL_UTF */ + +#include "mb/pg_wchar.h" + +static pg_enconv *tcl_enconv; + +static unsigned char * +utf_u2e(unsigned char *src) { + return pg_do_encoding_conversion(src,strlen(src), + NULL,tcl_enconv->from_unicode); +} + +static unsigned char * +utf_e2u(unsigned char *src) { + return pg_do_encoding_conversion(src,strlen(src), + tcl_enconv->to_unicode,NULL); +} + +# define PLTCL_UTF +# define UTF_BEGIN do { \ + unsigned char *_pltcl_utf_src; \ + unsigned char *_pltcl_utf_dst +# define UTF_END if (_pltcl_utf_src!=_pltcl_utf_dst) \ + pfree(_pltcl_utf_dst); } while (0) +# define UTF_U2E(x) (_pltcl_utf_dst=utf_u2e(_pltcl_utf_src=(x))) +# define UTF_E2U(x) (_pltcl_utf_dst=utf_e2u(_pltcl_utf_src=(x))) +#else /* PLTCL_UTF */ # define UTF_BEGIN # define UTF_END # define UTF_U2E(x) (x) # define UTF_E2U(x) (x) -#endif /* ENABLE_PLTCL_UTF */ +#endif /* PLTCL_UTF */ /********************************************************************** * The information we cache about loaded procedures @@ -196,6 +217,14 @@ ************************************************************/ if (!pltcl_firstcall) return; + +#ifdef PLTCL_UTF + /************************************************************ + * Do unicode conversion initialization + ************************************************************/ + + tcl_enconv=pg_get_enconv_by_encoding(GetDatabaseEncoding()); +#endif /************************************************************ * Create the dummy hold interpreter to prevent close of