]> granicus.if.org Git - pgbouncer/commitdiff
Refactor bin2hex function
authorMarko Kreen <markokr@gmail.com>
Wed, 18 Jul 2012 18:16:46 +0000 (21:16 +0300)
committerMarko Kreen <markokr@gmail.com>
Wed, 18 Jul 2012 18:16:46 +0000 (21:16 +0300)
include/util.h
src/util.c

index ad5bafa4f0fe9fc76e397b708711da53f4ec98f6..7f54a3a10f4d05c4783f71837b60baa148761985 100644 (file)
@@ -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);
index 8095c1567918cca0355e466978983670798d1b0e..e9c1f8c3e8a297941dc4d4996d8d1c7ee96363e0 100644 (file)
@@ -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,