From afde2acc507a131deca7aad5e069b9c68be76365 Mon Sep 17 00:00:00 2001
From: Tatsuo Ishii <ishii@postgresql.org>
Date: Fri, 17 Nov 2000 04:22:52 +0000
Subject: [PATCH] Recongizing PGCLIENTENCODING has been broken since 7.0.

---
 src/interfaces/libpq/fe-connect.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index a26f7ac5cc0..1703c554632 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.147 2000/11/14 01:15:06 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.148 2000/11/17 04:22:52 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1608,10 +1608,11 @@ keep_going:						/* We will come back to here until there
 			{
 				const char *env;
 
-				/* query server encoding */
 				env = getenv(envname);
 				if (!env || *env == '\0')
 				{
+					/* query server encoding if PGCLIENTENCODING
+					   is not specified */
 					if (!PQsendQuery(conn,
 									 "select getdatabaseencoding()"))
 						goto error_return;
@@ -1619,6 +1620,19 @@ keep_going:						/* We will come back to here until there
 					conn->setenv_state = SETENV_STATE_ENCODINGS_WAIT;
 					return PGRES_POLLING_READING;
 				}
+				else
+				{
+					/* otherwise set client encoding in pg_conn struct */
+					int encoding = pg_char_to_encoding(env);
+					if (encoding < 0)
+					{
+						strcpy(conn->errorMessage.data,
+							   "PGCLIENTENCODING has no valid encoding name.\n");
+						goto error_return;
+					}
+					conn->client_encoding = encoding;
+				}
+					
 			}
 
 		case SETENV_STATE_ENCODINGS_WAIT:
-- 
GitLab