From: Magnus Hagander <magnus@hagander.net>
To: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@postgreSQL.org
Subject: Re: Re: [COMMITTERS] pgsql: Explicitly bind gettext to the correct encoding on Windows.
Date: Mon, 20 Apr 2009 11:37:51 +0200
Message-ID: <49EC426F.5020602@hagander.net> (raw)
In-Reply-To: <49DC7E11.2050501@enterprisedb.com>
References: <20090122100948.89F977559ED@cvs.postgresql.org>
<20643.1232666867@sss.pgh.pa.us>
<499821F3.7050004@hagander.net>
<22474.1234718514@sss.pgh.pa.us>
<49D47C40.5040300@hagander.net>
<49DC7E11.2050501@enterprisedb.com>
Heikki Linnakangas wrote:
> Magnus Hagander wrote:
>> Tom Lane wrote:
>>> Magnus Hagander <magnus@hagander.net> writes:
>>>> Tom Lane wrote:
>>>>> What makes more sense to me is to add a table to encnames.c that
>>>>> provides the gettext name of every encoding that we support.
>>>> Do you mean a separate table there, or should we add a new column to
>>>> one
>>>> of the existing tables?
>>> Whichever seems to make more sense is fine with me. I just don't want
>>> add-an-encoding maintenance requirements spread across N different
>>> source files.
>>
>> I was about to start looking at this when that other thread
>> (http://archives.postgresql.org//pgsql-hackers/2009-03/msg01270.php)
>> started about related issues on other platforms. Seems we should have a
>> "coordinated fix" for this, so I'm going to want and see what come sout
>> of that one. Unless I'm misunderstanding thigns and they're not related?
>
> I've committed a fairly trivial patch per Peter's suggestion to fix the
> other thread's issue. I left the table as is, so whatever refactorings
> were planned can now be applied.
Here's a patch that moves the table over to encnames.c, and renames it
to look like the others.
I don't know what it should be doing if it can't find a match, so I
haven't changed that behavior.
Comments?
//Magnus
Attachments:enctable.patch (text/x-diff, 3.7K) download
*** a/src/backend/utils/mb/encnames.c
--- b/src/backend/utils/mb/encnames.c
***************
*** 431,436 **** pg_enc2name pg_enc2name_tbl[] =
--- 431,478 ----
};
/* ----------
+ * These are encoding names for gettext.+ * ----------+ */+ pg_enc2gettext pg_enc2gettext_tbl[] =+ {+ {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_KOI8U, "KOI8-U"},+ {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"}+ };+ + + /* ----------
* Encoding checks, for error returns -1 else encoding id
* ----------
*/
*** a/src/backend/utils/mb/mbutils.c
--- b/src/backend/utils/mb/mbutils.c
***************
*** 890,936 **** cliplen(const char *str, int len, int limit)
return l;
}
- #if defined(ENABLE_NLS)- 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_KOI8U, "KOI8-U"},- {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 /* ENABLE_NLS */-
void
SetDatabaseEncoding(int encoding)
{
--- 890,895 ----
***************
*** 969,980 **** pg_bind_textdomain_codeset(const char *domainname)
return;
#endif
! for (i = 0; i < lengthof(codeset_map_array); i++)
{
! if (codeset_map_array[i].encoding == encoding)
{
if (bind_textdomain_codeset(domainname,
! codeset_map_array[i].codeset) == NULL)
elog(LOG, "bind_textdomain_codeset failed");
break;
}
--- 928,939 ----
return;
#endif
! for (i = 0; pg_enc2gettext_tbl[i].name != NULL; i++)
{
! if (pg_enc2gettext_tbl[i].encoding == encoding)
{
if (bind_textdomain_codeset(domainname,
! pg_enc2gettext_tbl[i].name) == NULL)
elog(LOG, "bind_textdomain_codeset failed");
break;
}
*** a/src/include/mb/pg_wchar.h
--- b/src/include/mb/pg_wchar.h
***************
*** 262,267 **** typedef struct pg_enc2name
--- 262,278 ----
extern pg_enc2name pg_enc2name_tbl[];
/*
+ * Encoding names for gettext+ */+ typedef struct pg_enc2gettext+ {+ pg_enc encoding;+ const char *name;+ } pg_enc2gettext;+ + extern pg_enc2gettext pg_enc2gettext_tbl[];+ + /*
* pg_wchar stuff
*/
typedef int (*mb2wchar_with_len_converter) (const unsigned char *from,
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-committers@postgresql.org
Cc: magnus@hagander.net, heikki.linnakangas@enterprisedb.com, tgl@sss.pgh.pa.us, pgsql-hackers@postgreSQL.org
Subject: Re: Re: [COMMITTERS] pgsql: Explicitly bind gettext to the correct encoding on Windows.
In-Reply-To: <49EC426F.5020602@hagander.net>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox