From: Ian Jackson Date: Sat, 28 Sep 2019 10:55:17 +0000 (+0100) Subject: style: util.[ch]: Introduce hex_encode_alloc name X-Git-Tag: v0.5.0~153 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=commitdiff_plain;h=36a81f9cfda6df8a79169e93a251e8e13b64f09c style: util.[ch]: Introduce hex_encode_alloc name Prompted by review of 7be31e47b2a8 "util.[ch]: Factor out hex encoding and decoding utilities." which says The interface is a bit odd, but it will fit with the uses I have in mind. Not sure if it's the encode or decode interface which is referred to. Certainly there should be a non-allocating variant. I decided to rename the allocating one. The two separate buffer arguments to hex_decode are indeed a bit odd but IMO tolerable. Signed-off-by: Ian Jackson --- diff --git a/util.c b/util.c index 4729df4..5200e18 100644 --- a/util.c +++ b/util.c @@ -93,18 +93,23 @@ void *safe_malloc_ary(size_t size, size_t count, const char *message) { return safe_realloc_ary(0,size,count,message); } -string_t hex_encode(const uint8_t *bin, int binsize) +void hex_encode(const uint8_t *bin, int binsize, char *buff) { - char *buff; int i; - buff=safe_malloc(binsize*2 + 1,"hex_encode"); - for (i=0; i> 4]; buff[i*2+1]=hexdigits[(bin[i] & 0xf)]; } buff[binsize*2]=0; +} + +string_t hex_encode_alloc(const uint8_t *bin, int binsize) +{ + char *buff; + + buff=safe_malloc(hex_encode_size(binsize),"hex_encode"); + hex_encode(bin,binsize,buff); return buff; } @@ -164,7 +169,7 @@ done: void read_mpbin(MP_INT *a, uint8_t *bin, int binsize) { - char *buff = hex_encode(bin, binsize); + char *buff = hex_encode_alloc(bin, binsize); mpz_set_str(a, buff, 16); free(buff); } diff --git a/util.h b/util.h index 0a96556..eb9e51f 100644 --- a/util.h +++ b/util.h @@ -89,9 +89,11 @@ extern void buf_append_string(struct buffer_if *buf, cstring_t s); /* Append a two-byte length and the string to the buffer. Length is in * network byte order. */ -extern string_t hex_encode(const uint8_t *bin, int binsize); - /* Convert a byte array to hex, returning the result in a freshly allocated - * string. */ +static inline int hex_encode_size(int binsize) { return binsize*2 + 1; } +extern void hex_encode(const uint8_t *bin, int binsize, char *buf); + /* Convert a byte array to hex into a supplied buffer. */ +extern string_t hex_encode_alloc(const uint8_t *bin, int binsize); + /* Returns the result in a freshly allocated string. */ extern bool_t hex_decode(uint8_t *buffer, int32_t buflen, int32_t *outlen, cstring_t hb, bool_t allow_odd_nibble);