From 6862dd3ff3c677bdf991e580e193d9979c9df3d8 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Wed, 18 Jul 2012 21:16:46 +0300 Subject: [PATCH] Refactor bin2hex function --- include/util.h | 2 ++ src/util.c | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/include/util.h b/include/util.h index ad5bafa..7f54a3a 100644 --- a/include/util.h +++ b/include/util.h @@ -42,6 +42,8 @@ int log_socket_prefix(enum LogLevel lev, void *ctx, char *dst, unsigned int dstl void pg_md5_encrypt(const char *part1, const char *part2, size_t p2len, char *dest); void get_random_bytes(uint8_t *dest, int len); +const char *bin2hex(const uint8_t *src, unsigned srclen, char *dst, unsigned dstlen); + bool tune_socket(int sock, bool is_unix) _MUSTCHECK; bool strlist_contains(const char *liststr, const char *str); diff --git a/src/util.c b/src/util.c index 8095c15..e9c1f8c 100644 --- a/src/util.c +++ b/src/util.c @@ -51,19 +51,29 @@ int log_socket_prefix(enum LogLevel lev, void *ctx, char *dst, unsigned int dstl sock, db, user, host, port); } +const char *bin2hex(const uint8_t *src, unsigned srclen, char *dst, unsigned dstlen) +{ + unsigned int i, j; + static const char hextbl [] = "0123456789abcdef"; + if (!dstlen) + return ""; + if (srclen*2+1 > dstlen) + srclen = (dstlen - 1) / 2; + for (i = j = 0; i < srclen; i++) { + dst[j++] = hextbl[src[i] >> 4]; + dst[j++] = hextbl[src[i] & 15]; + } + dst[j] = 0; + return dst; +} + /* * PostgreSQL MD5 hashing. */ static void hash2hex(const uint8_t *hash, char *dst) { - int i; - static const char hextbl [] = "0123456789abcdef"; - for (i = 0; i < MD5_DIGEST_LENGTH; i++) { - *dst++ = hextbl[hash[i] >> 4]; - *dst++ = hextbl[hash[i] & 15]; - } - *dst = 0; + bin2hex(hash, MD5_DIGEST_LENGTH, dst, 16*2+1); } void pg_md5_encrypt(const char *part1, -- 2.40.0