summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2012-02-03 03:27:19 +0100
committerVolker Lendecke <vl@samba.org>2012-02-06 09:15:32 +0100
commita0e44c30e21013f0136ddefc1bbbdc020413e749 (patch)
treebf5ffefbbefe58149e736bd3210ccdae75463cfd /lib/util
parent74ca6d1ddb1c5a4fbe9ddb29566878efe1761897 (diff)
downloadsamba-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
Diffstat (limited to 'lib/util')
-rw-r--r--lib/util/samba_util.h5
-rw-r--r--lib/util/util.c25
2 files changed, 21 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;
}