summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/encode.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2020-12-24 17:25:48 -0500
committerBruce Momjian <bruce@momjian.us>2020-12-24 17:25:48 -0500
commitc3826f831e6e63e13a749fd3ab9fd7106707b549 (patch)
treea060a73607136f8bd58000ffc0b14410f136f986 /src/backend/utils/adt/encode.c
parent7519bd16d1a2a2007b3604f6740611c0b75a6cd0 (diff)
downloadpostgresql-c3826f831e6e63e13a749fd3ab9fd7106707b549.tar.gz
move hex_decode() to /common so it can be called from frontend
This allows removal of a copy of hex_decode() from ecpg, and will be used by the soon-to-be added pg_alterckey command. Backpatch-through: master
Diffstat (limited to 'src/backend/utils/adt/encode.c')
-rw-r--r--src/backend/utils/adt/encode.c64
1 files changed, 1 insertions, 63 deletions
diff --git a/src/backend/utils/adt/encode.c b/src/backend/utils/adt/encode.c
index a609d49c12..a6c65b1657 100644
--- a/src/backend/utils/adt/encode.c
+++ b/src/backend/utils/adt/encode.c
@@ -15,6 +15,7 @@
#include <ctype.h>
+#include "common/hex_decode.h"
#include "mb/pg_wchar.h"
#include "utils/builtins.h"
#include "utils/memutils.h"
@@ -146,17 +147,6 @@ binary_decode(PG_FUNCTION_ARGS)
static const char hextbl[] = "0123456789abcdef";
-static const int8 hexlookup[128] = {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
- -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
uint64
hex_encode(const char *src, size_t len, char *dst)
{
@@ -171,58 +161,6 @@ hex_encode(const char *src, size_t len, char *dst)
return (uint64) len * 2;
}
-static inline char
-get_hex(const char *cp)
-{
- unsigned char c = (unsigned char) *cp;
- int res = -1;
-
- if (c < 127)
- res = hexlookup[c];
-
- if (res < 0)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("invalid hexadecimal digit: \"%.*s\"",
- pg_mblen(cp), cp)));
-
- return (char) res;
-}
-
-uint64
-hex_decode(const char *src, size_t len, char *dst)
-{
- const char *s,
- *srcend;
- char v1,
- v2,
- *p;
-
- srcend = src + len;
- s = src;
- p = dst;
- while (s < srcend)
- {
- if (*s == ' ' || *s == '\n' || *s == '\t' || *s == '\r')
- {
- s++;
- continue;
- }
- v1 = get_hex(s) << 4;
- s++;
- if (s >= srcend)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("invalid hexadecimal data: odd number of digits")));
-
- v2 = get_hex(s);
- s++;
- *p++ = v1 | v2;
- }
-
- return p - dst;
-}
-
static uint64
hex_enc_len(const char *src, size_t srclen)
{