diff options
| author | Tatsuo Ishii <ishii@postgresql.org> | 2001-09-06 04:57:30 +0000 |
|---|---|---|
| committer | Tatsuo Ishii <ishii@postgresql.org> | 2001-09-06 04:57:30 +0000 |
| commit | 227767112c3d3a6562b27e0a0da064d8b8ca1ebf (patch) | |
| tree | 83793014a004ba5098dba7f6c31ec6992049c80d /src/bin/pg_encoding/pg_encoding.c | |
| parent | 50aa3020ac925d3f537fe580e218f8d9cec9fc5b (diff) | |
| download | postgresql-227767112c3d3a6562b27e0a0da064d8b8ca1ebf.tar.gz | |
Commit Karel's patch.
-------------------------------------------------------------------
Subject: Re: [PATCHES] encoding names
From: Karel Zak <zakkr@zf.jcu.cz>
To: Peter Eisentraut <peter_e@gmx.net>
Cc: pgsql-patches <pgsql-patches@postgresql.org>
Date: Fri, 31 Aug 2001 17:24:38 +0200
On Thu, Aug 30, 2001 at 01:30:40AM +0200, Peter Eisentraut wrote:
> > - convert encoding 'name' to 'id'
>
> I thought we decided not to add functions returning "new" names until we
> know exactly what the new names should be, and pending schema
Ok, the patch not to add functions.
> better
>
> ...(): encoding name too long
Fixed.
I found new bug in command/variable.c in parse_client_encoding(), nobody
probably never see this error:
if (pg_set_client_encoding(encoding))
{
elog(ERROR, "Conversion between %s and %s is not supported",
value, GetDatabaseEncodingName());
}
because pg_set_client_encoding() returns -1 for error and 0 as true.
It's fixed too.
IMHO it can be apply.
Karel
PS:
* following files are renamed:
src/utils/mb/Unicode/KOI8_to_utf8.map -->
src/utils/mb/Unicode/koi8r_to_utf8.map
src/utils/mb/Unicode/WIN_to_utf8.map -->
src/utils/mb/Unicode/win1251_to_utf8.map
src/utils/mb/Unicode/utf8_to_KOI8.map -->
src/utils/mb/Unicode/utf8_to_koi8r.map
src/utils/mb/Unicode/utf8_to_WIN.map -->
src/utils/mb/Unicode/utf8_to_win1251.map
* new file:
src/utils/mb/encname.c
* removed file:
src/utils/mb/common.c
--
Karel Zak <zakkr@zf.jcu.cz>
http://home.zf.jcu.cz/~zakkr/
C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz
Diffstat (limited to 'src/bin/pg_encoding/pg_encoding.c')
| -rw-r--r-- | src/bin/pg_encoding/pg_encoding.c | 66 |
1 files changed, 52 insertions, 14 deletions
diff --git a/src/bin/pg_encoding/pg_encoding.c b/src/bin/pg_encoding/pg_encoding.c index fc0714641e..3e2b84e0bd 100644 --- a/src/bin/pg_encoding/pg_encoding.c +++ b/src/bin/pg_encoding/pg_encoding.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_encoding/Attic/pg_encoding.c,v 1.8 2000/02/19 04:59:30 ishii Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_encoding/Attic/pg_encoding.c,v 1.9 2001/09/06 04:57:29 ishii Exp $ * *------------------------------------------------------------------------- */ @@ -15,37 +15,75 @@ #include "miscadmin.h" #include "mb/pg_wchar.h" +#include <ctype.h> + static void usage(void); int main(int argc, char **argv) { - char c; - char *p; - int rtn; + char *p; + int enc; + bool be_only = FALSE; if (argc < 2) { usage(); exit(1); } - p = argv[1]; - while ((c = *p++)) + + if (strcmp(argv[1], "-b")==0) { - if (c < '0' || c > '9') + if (argc < 3) { - rtn = pg_char_to_encoding(argv[1]); - if (rtn >= 0) - printf("%d\n", rtn); - exit(0); + usage(); + exit(1); } + be_only = TRUE; + p = argv[2]; } - printf("%s\n", pg_encoding_to_char(atoi(argv[1]))); - exit(0); + else + p = argv[1]; + + if (p && *p && isdigit((unsigned char) *p)) + { + /* + * Encoding number to name + */ + char *name; + + enc = atoi(p); + + if ((name = (char *) pg_encoding_to_char(enc))) + { + if (be_only && pg_valid_server_encoding(name) < 0) + exit(0); + printf("%s\n", name); + } + exit(0); + } + else if (p && *p) + { + /* + * Encoding name to encoding number + */ + if ((enc = pg_char_to_encoding(p)) >= 0) + { + if (be_only && pg_valid_server_encoding(p) < 0) + exit(0); + printf("%d\n", enc); + } + exit(0); + } + exit(1); } static void usage() { - fprintf(stderr, "\nUsage: pg_encoding encoding_name | encoding_number\n\n"); + fprintf(stderr, + "\nUsage: pg_encoding [options] encoding_name | encoding_number\n\n" + "options:" + " -b check if encoding is valid for backend\n\n" + ); } |
