diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile
index 7f651fa8854d58f9bd9bf57c93fbc458d8f33bf9..01d68aa83cbb549dde5ae37d900ecd8d8501b59d 100644
--- a/src/interfaces/libpq/Makefile
+++ b/src/interfaces/libpq/Makefile
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/interfaces/libpq/Makefile,v 1.46 2000/10/25 16:13:52 petere Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/libpq/Makefile,v 1.47 2000/10/30 10:31:45 ishii Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -23,7 +23,7 @@ OBJS= fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o \
       pqexpbuffer.o dllist.o pqsignal.o $(SNPRINTF) $(INET_ATON)
 
 ifdef MULTIBYTE
-OBJS+= common.o wchar.o conv.o big5.o mbutils.o
+OBJS+= common.o wchar.o
 endif
 
 # Add libraries that libpq depends (or might depend) on into the
@@ -57,9 +57,7 @@ inet_aton.c: $(backend_src)/port/inet_aton.c
 	rm -f $@ && $(LN_S) $< .
 
 ifdef MULTIBYTE
-maps = iso8859.map UTF_to_EUC_JP.map EUC_JP_to_UTF.map sjis.map
-conv.c: $(maps)
-common.c wchar.c conv.c big5.c mbutils.c $(maps) : % : $(backend_src)/utils/mb/%
+common.c wchar.c : % : $(backend_src)/utils/mb/%
 	rm -f $@ && $(LN_S) $< .
 endif
 
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index bdc49165f4b68c3f82bd2106915a24cbfa705f5a..63be5279fae516ce4c86afd2e3b25bc0e48889df 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.142 2000/10/23 14:50:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.143 2000/10/30 10:31:46 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2694,3 +2694,70 @@ defaultNoticeProcessor(void *arg, const char *message)
 	/* Note: we expect the supplied string to end with a newline already. */
 	fprintf(stderr, "%s", message);
 }
+
+#ifdef MULTIBYTE
+/*
+ * convert an encoding string to encoding symbol value.
+ * case is ignored.
+ * if there's no valid encoding, returns -1
+ */
+
+typedef struct {
+	int encoding;	/* encoding symbol value */
+	char *name;	/* encoding string */
+} PQ_encoding_conv_tbl;
+
+static PQ_encoding_conv_tbl pq_conv_tbl[] = {
+		{SQL_ASCII, "SQL_ASCII"},
+		{EUC_JP, "EUC_JP"},
+		{EUC_CN, "EUC_CN"},
+		{EUC_KR, "EUC_KR"},
+		{UNICODE, "UNICODE"},
+		{MULE_INTERNAL, "MULE_INTERNAL"},
+		{LATIN1, "LATIN1"},
+		{LATIN2, "LATIN2"},
+		{LATIN3, "LATIN3"},
+		{LATIN4, "LATIN4"},
+		{LATIN5, "LATIN5"},
+		{KOI8, "KOI8"},
+		{WIN, "WIN"},
+		{ALT, "ALT"},
+		{SJIS, "SJIS"},
+		{BIG5, "BIG5"},
+		{WIN1250, "WIN1250"},
+		{-1, ""}
+};
+
+int
+pg_char_to_encoding(const char *s)
+{
+	PQ_encoding_conv_tbl *p = pq_conv_tbl;
+
+	if (!s)
+		return (-1);
+
+	for (; p->encoding >= 0; p++)
+	{
+		if (!strcasecmp(s, p->name))
+			break;
+	}
+	return (p->encoding);
+}
+
+/*
+ * convert encoding symbol to encoding char.
+ * if there's no valid encoding symbol, returns ""
+ */
+const char *
+pg_encoding_to_char(int encoding)
+{
+	PQ_encoding_conv_tbl *p = pq_conv_tbl;
+
+	for (; p->encoding >= 0; p++)
+	{
+		if (p->encoding == encoding)
+			return (p->name);
+	}
+	return ("");
+}
+#endif