mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
Fix for GUC client_encoding variable not being handled
correctly. See following thread for more details. Subject: [HACKERS] client_encoding directive is ignored in postgresql.conf From: Tatsuo Ishii <t-ishii@sra.co.jp> Date: Wed, 29 Jan 2003 22:24:04 +0900 (JST)
This commit is contained in:
@ -4,7 +4,7 @@
|
||||
* (currently mule internal code (mic) is used)
|
||||
* Tatsuo Ishii
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mb/mbutils.c,v 1.37 2002/11/26 02:22:29 ishii Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mb/mbutils.c,v 1.38 2003/02/19 14:31:26 ishii Exp $
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
@ -37,6 +37,8 @@ static unsigned char *perform_default_encoding_conversion(unsigned char *src,
|
||||
int len, bool is_client_to_server);
|
||||
static int cliplen(const unsigned char *str, int len, int limit);
|
||||
|
||||
/* Flag to we need to initialize client encoding info */
|
||||
static bool need_to_init_client_encoding = -1;
|
||||
|
||||
/*
|
||||
* Set the client encoding and save fmgrinfo for the converion
|
||||
@ -58,6 +60,13 @@ SetClientEncoding(int encoding, bool doit)
|
||||
if (!PG_VALID_FE_ENCODING(encoding))
|
||||
return (-1);
|
||||
|
||||
/* If we cannot actualy set client encoding info, remeber it
|
||||
* so that we could set it using InitializeClientEncoding()
|
||||
* in InitPostgres()
|
||||
*/
|
||||
if (current_server_encoding != encoding && !IsTransactionState())
|
||||
need_to_init_client_encoding = encoding;
|
||||
|
||||
if (current_server_encoding == encoding ||
|
||||
(current_server_encoding == PG_SQL_ASCII || encoding == PG_SQL_ASCII))
|
||||
{
|
||||
@ -115,6 +124,19 @@ SetClientEncoding(int encoding, bool doit)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Initialize client encoding if necessary.
|
||||
* called from InitPostgres() once during backend starting up.
|
||||
*/
|
||||
void
|
||||
InitializeClientEncoding()
|
||||
{
|
||||
if (need_to_init_client_encoding > 0)
|
||||
{
|
||||
SetClientEncoding(need_to_init_client_encoding, 1);
|
||||
need_to_init_client_encoding = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* returns the current client encoding */
|
||||
int
|
||||
|
Reference in New Issue
Block a user