diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c index ee9649f32d..1a4493c8e0 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.4 1998/12/14 04:59:58 momjian Exp $ */ #include #include @@ -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 a340c0a258..ace31f577c 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.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)