Fix and cleanup gt_{from,to}hex

This commit is contained in:
angt
2015-12-13 11:26:58 +01:00
parent 6040f17e1c
commit ffa549e444

View File

@@ -41,17 +41,20 @@ void gt_na (const char *name)
int gt_tohex (char *dst, size_t dst_size, const uint8_t *src, size_t src_size) int gt_tohex (char *dst, size_t dst_size, const uint8_t *src, size_t src_size)
{ {
if _0_(dst_size<2*src_size+1) if _0_(!dst_size)
return -1; return -1;
const char tbl[] = "0123456789ABCDEF"; if _0_(((dst_size-1)/2)<src_size)
return -1;
static const char tbl[] = "0123456789ABCDEF";
for (size_t i=0; i<src_size; i++) { for (size_t i=0; i<src_size; i++) {
dst[(i<<1)+0] = tbl[0xF&(src[i]>>4)]; *dst++ = tbl[0xF&(src[i]>>4)];
dst[(i<<1)+1] = tbl[0xF&(src[i])]; *dst++ = tbl[0xF&(src[i])];
} }
dst[2*src_size] = 0; *dst = 0;
return 0; return 0;
} }
@@ -63,7 +66,7 @@ static inline int fromhex (const char c)
return c-'0'; return c-'0';
if (c>='A' && c<='F') if (c>='A' && c<='F')
return c-'a'+10; return c-'A'+10;
return -1; return -1;
} }
@@ -73,7 +76,7 @@ int gt_fromhex (uint8_t *dst, size_t dst_size, const char *src, size_t src_size)
if _0_(src_size&1) if _0_(src_size&1)
return -1; return -1;
if _0_(src_size>2*dst_size) if _0_(dst_size<(src_size/2))
return -1; return -1;
for (size_t i=0; i<src_size; i+=2) { for (size_t i=0; i<src_size; i+=2) {
@@ -83,7 +86,7 @@ int gt_fromhex (uint8_t *dst, size_t dst_size, const char *src, size_t src_size)
if _0_(a==-1 || b==-1) if _0_(a==-1 || b==-1)
return -1; return -1;
dst[i>>1] = (a<<4)|b; *dst++ = (a<<4)|b;
} }
return 0; return 0;