postgres.git / summary / log / commit / refs

commit    be471a96b79fafe7ef8eccc002270ca9e0eae677
Author:   Bruce Momjian <bruce@momjian.us>
Date:     Mon Dec 14 04:51:34 1998 +0000
First released in: 6.5, 6.4.2

    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


src/backend/utils/mb/conv.c | 5 +++-- src/bin/psql/psql.c | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c index ee9649f32d9..97ba1caafa1 100644 --- a/src/backend/utils/mb/conv.c +++ b/src/backend/utils/mb/conv.c @@ -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.3.2.1 1998/12/14 04:51:33 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'; } diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c index de9339d8eef..eea1c928827 100644 --- a/src/bin/psql/psql.c +++ b/src/bin/psql/psql.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.163.2.1 1998/11/24 05:50:42 thomas Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.163.2.2 1998/12/14 04:51:34 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) [parent: 4d7ffd460a31]