Fix and cleanup gt_{from,to}hex
This commit is contained in:
19
src/common.c
19
src/common.c
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user