summaryrefslogtreecommitdiff
path: root/src/bin/pg_encoding/pg_encoding.c
diff options
context:
space:
mode:
authorTatsuo Ishii <ishii@postgresql.org>2001-09-06 04:57:30 +0000
committerTatsuo Ishii <ishii@postgresql.org>2001-09-06 04:57:30 +0000
commit227767112c3d3a6562b27e0a0da064d8b8ca1ebf (patch)
tree83793014a004ba5098dba7f6c31ec6992049c80d /src/bin/pg_encoding/pg_encoding.c
parent50aa3020ac925d3f537fe580e218f8d9cec9fc5b (diff)
downloadpostgresql-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.c66
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"
+ );
}