aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/mb/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/mb/common.c')
-rw-r--r--src/backend/utils/mb/common.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/backend/utils/mb/common.c b/src/backend/utils/mb/common.c
new file mode 100644
index 00000000000..c4e796e79ee
--- /dev/null
+++ b/src/backend/utils/mb/common.c
@@ -0,0 +1,67 @@
+/*
+ * This file contains some public functions
+ * usable for both the backend and the frontend.
+ * Tatsuo Ishii
+ * $Id: common.c,v 1.1 1998/07/24 03:31:56 scrappy Exp $ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "mb/pg_wchar.h"
+
+/*
+ * convert encoding char to encoding symbol value.
+ * case is ignored.
+ * if there's no valid encoding, returns -1
+ */
+int pg_char_to_encoding(const char *s)
+{
+ pg_encoding_conv_tbl *p = pg_conv_tbl;
+
+ for(;p->encoding >= 0;p++) {
+ if (!strcasecmp(s, p->name)) {
+ break;
+ }
+ }
+ return(p->encoding);
+}
+
+/*
+ * check to see if encoding name is valid
+ */
+int pg_valid_client_encoding(const char *name)
+{
+ return(pg_char_to_encoding(name));
+}
+
+/*
+ * find encoding table entry by encoding
+ */
+pg_encoding_conv_tbl *pg_get_encent_by_encoding(int encoding)
+{
+ pg_encoding_conv_tbl *p = pg_conv_tbl;
+ for(;p->encoding >= 0;p++) {
+ if (p->encoding == encoding) {
+ return(p);
+ }
+ }
+ return(0);
+}
+
+/*
+ * convert encoding symbol to encoding char.
+ * if there's no valid encoding symbol, returns ""
+ */
+const char *pg_encoding_to_char(int encoding)
+{
+ pg_encoding_conv_tbl *p = pg_get_encent_by_encoding(encoding);
+
+ if (!p) return("");
+ return(p->name);
+}
+
+/* returns the byte length of a multi-byte word for an encoding */
+int pg_encoding_mblen(int encoding, const unsigned char *mbstr)
+{
+ return((*pg_wchar_table[encoding].mblen)(mbstr));
+}