diff options
author | Volker Lendecke <vl@samba.org> | 2012-02-03 03:27:19 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2012-02-06 09:15:32 +0100 |
commit | a0e44c30e21013f0136ddefc1bbbdc020413e749 (patch) | |
tree | bf5ffefbbefe58149e736bd3210ccdae75463cfd | |
parent | 74ca6d1ddb1c5a4fbe9ddb29566878efe1761897 (diff) | |
download | samba-a0e44c30e21013f0136ddefc1bbbdc020413e749.tar.gz samba-a0e44c30e21013f0136ddefc1bbbdc020413e749.tar.bz2 samba-a0e44c30e21013f0136ddefc1bbbdc020413e749.zip |
lib/util: Add hex_encode_buf
Autobuild-User: Volker Lendecke <vl@samba.org>
Autobuild-Date: Mon Feb 6 09:15:33 CET 2012 on sn-devel-104
-rw-r--r-- | lib/util/samba_util.h | 5 | ||||
-rw-r--r-- | lib/util/util.c | 25 | ||||
-rwxr-xr-x | source3/selftest/tests.py | 1 | ||||
-rw-r--r-- | source3/torture/torture.c | 21 |
4 files changed, 43 insertions, 9 deletions
diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h index 9df3ddfcd0..5ce2e5e535 100644 --- a/lib/util/samba_util.h +++ b/lib/util/samba_util.h @@ -262,6 +262,11 @@ _PUBLIC_ size_t strhex_to_str(char *p, size_t p_len, const char *strhex, size_t _PUBLIC_ _PURE_ DATA_BLOB strhex_to_data_blob(TALLOC_CTX *mem_ctx, const char *strhex) ; /** + * Print a buf in hex. Assumes dst is at least (srclen*2)+1 large. + */ +_PUBLIC_ void hex_encode_buf(char *dst, const uint8_t *src, size_t srclen); + +/** * Routine to print a buffer as HEX digits, into an allocated string. */ _PUBLIC_ void hex_encode(const unsigned char *buff_in, size_t len, char **out_hex_buffer); diff --git a/lib/util/util.c b/lib/util/util.c index c4fbd0b39f..867da0a340 100644 --- a/lib/util/util.c +++ b/lib/util/util.c @@ -758,20 +758,31 @@ _PUBLIC_ _PURE_ DATA_BLOB strhex_to_data_blob(TALLOC_CTX *mem_ctx, const char *s return ret_blob; } +/** + * Print a buf in hex. Assumes dst is at least (srclen*2)+1 large. + */ +_PUBLIC_ void hex_encode_buf(char *dst, const uint8_t *src, size_t srclen) +{ + size_t i; + for (i=0; i<srclen; i++) { + snprintf(dst + i*2, 3, "%02X", src[i]); + } + /* + * Ensure 0-termination for 0-length buffers + */ + dst[srclen*2] = '\0'; +} /** * Routine to print a buffer as HEX digits, into an allocated string. */ _PUBLIC_ void hex_encode(const unsigned char *buff_in, size_t len, char **out_hex_buffer) { - int i; char *hex_buffer; *out_hex_buffer = malloc_array_p(char, (len*2)+1); hex_buffer = *out_hex_buffer; - - for (i = 0; i < len; i++) - slprintf(&hex_buffer[i*2], 3, "%02X", buff_in[i]); + hex_encode_buf(hex_buffer, buff_in, len); } /** @@ -779,17 +790,13 @@ _PUBLIC_ void hex_encode(const unsigned char *buff_in, size_t len, char **out_he */ _PUBLIC_ char *hex_encode_talloc(TALLOC_CTX *mem_ctx, const unsigned char *buff_in, size_t len) { - int i; char *hex_buffer; hex_buffer = talloc_array(mem_ctx, char, (len*2)+1); if (!hex_buffer) { return NULL; } - - for (i = 0; i < len; i++) - slprintf(&hex_buffer[i*2], 3, "%02X", buff_in[i]); - + hex_encode_buf(hex_buffer, buff_in, len); talloc_set_name_const(hex_buffer, hex_buffer); return hex_buffer; } diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 6a3ccb9877..ce6d964703 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -107,6 +107,7 @@ local_tests=[ "LOCAL-TEVENT-SELECT", "LOCAL-CONVERT-STRING", "LOCAL-CONV-AUTH-INFO", + "LOCAL-hex_encode_buf", "LOCAL-sprintf_append"] for t in local_tests: diff --git a/source3/torture/torture.c b/source3/torture/torture.c index e4ce91338f..b14f9ed873 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -8693,6 +8693,26 @@ fail: return result; } +static bool run_local_hex_encode_buf(int dummy) +{ + char buf[17]; + uint8_t src[8]; + int i; + + for (i=0; i<sizeof(src); i++) { + src[i] = i; + } + hex_encode_buf(buf, src, sizeof(src)); + if (strcmp(buf, "0001020304050607") != 0) { + return false; + } + hex_encode_buf(buf, NULL, 0); + if (buf[0] != '\0') { + return false; + } + return true; +} + static double create_procs(bool (*fn)(int), bool *result) { int i, status; @@ -8895,6 +8915,7 @@ static struct { { "LOCAL-CONVERT-STRING", run_local_convert_string, 0}, { "LOCAL-CONV-AUTH-INFO", run_local_conv_auth_info, 0}, { "LOCAL-sprintf_append", run_local_sprintf_append, 0}, + { "LOCAL-hex_encode_buf", run_local_hex_encode_buf, 0}, {NULL, NULL, 0}}; |