Commit ffb90a01 authored by Bruce Momjian's avatar Bruce Momjian

Current multi-byte related codes have a bug with SQL_ASCII

support. Included patches will solve it and should be applied to
both trees.  Also, it fix the problem with \c command of psql when
switching different encoding databases.

Regression tests passed.
--
Tatsuo Ishii
t-ishii@sra.co.jp
parent 4140c2f3
......@@ -2,7 +2,7 @@
* conversion between client encoding and server internal encoding
* (currently mule internal code (mic) is used)
* Tatsuo Ishii
* $Id: conv.c,v 1.3 1998/09/01 04:33:21 momjian Exp $
* $Id: conv.c,v 1.4 1998/12/14 04:59:58 momjian Exp $
*/
#include <stdio.h>
#include <string.h>
......@@ -487,7 +487,7 @@ mic2ascii(unsigned char *mic, unsigned char *p, int len)
{
int c1;
while (len > 0 && (c1 = *mic))
while (len-- > 0 && (c1 = *mic))
{
if (c1 > 0x7f)
printBogusChar(&mic, &p);
......@@ -495,6 +495,7 @@ mic2ascii(unsigned char *mic, unsigned char *p, int len)
{ /* should be ASCII */
*p++ = c1;
}
mic++;
}
*p = '\0';
}
......
......@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.164 1998/11/17 14:26:31 thomas Exp $
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.165 1998/12/14 04:59:58 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -84,6 +84,11 @@ char *__progname = "psql";
#endif
#ifdef MULTIBYTE
/* flag to indicate if PGCLIENTENCODING has been set by a user */
static int has_client_encoding;
#endif
/* This prompt string is assumed to have at least 3 characters by code in MainLoop().
* A character two characters from the end is replaced each time by a mode character.
*/
......@@ -1485,6 +1490,18 @@ do_connect(const char *new_dbname,
/* FIXME: if changing user, ought to prompt for a new password? */
pwparam = PQpass(olddb);
#ifdef MULTIBYTE
/* PGCLIENTENCODING may be set by the previous connection.
if a user does not explicitly set PGCLIENTENCODING,
we should discard PGCLIENTENCODING so that
libpq could get the backend encoding as the default
PGCLIENTENCODING value. -- 1998/12/12 Tatsuo Ishii */
if (!has_client_encoding) {
unsetenv("PGCLIENTENCODING");
}
#endif
pset->db = PQsetdbLogin(PQhost(olddb), PQport(olddb),
NULL, NULL, dbparam, userparam, pwparam);
......@@ -2754,6 +2771,10 @@ main(int argc, char **argv)
settings.getPassword = 0;
#endif
#ifdef MUTIBYTE
has_client_encoding = getenv("PGCLIENTENCODING");
#endif
while ((c = getopt(argc, argv, "Aa:c:d:ef:F:lh:Hnso:p:qStT:ux")) != EOF)
{
switch (c)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment