Replace sscanf() with strtol() in hex2bin()
This commit is contained in:
parent
c4a5f64019
commit
f80163ec4c
1 changed files with 8 additions and 11 deletions
17
util.c
17
util.c
|
@ -458,26 +458,23 @@ char *bin2hex(const unsigned char *p, size_t len)
|
||||||
|
|
||||||
bool hex2bin(unsigned char *p, const char *hexstr, size_t len)
|
bool hex2bin(unsigned char *p, const char *hexstr, size_t len)
|
||||||
{
|
{
|
||||||
while (*hexstr && len) {
|
|
||||||
char hex_byte[3];
|
char hex_byte[3];
|
||||||
unsigned int v;
|
char *ep;
|
||||||
|
|
||||||
|
hex_byte[2] = '\0';
|
||||||
|
|
||||||
|
while (*hexstr && len) {
|
||||||
if (!hexstr[1]) {
|
if (!hexstr[1]) {
|
||||||
applog(LOG_ERR, "hex2bin str truncated");
|
applog(LOG_ERR, "hex2bin str truncated");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
hex_byte[0] = hexstr[0];
|
hex_byte[0] = hexstr[0];
|
||||||
hex_byte[1] = hexstr[1];
|
hex_byte[1] = hexstr[1];
|
||||||
hex_byte[2] = 0;
|
*p = (unsigned char) strtol(hex_byte, &ep, 16);
|
||||||
|
if (*ep) {
|
||||||
if (sscanf(hex_byte, "%x", &v) != 1) {
|
applog(LOG_ERR, "hex2bin failed on '%s'", hex_byte);
|
||||||
applog(LOG_ERR, "hex2bin sscanf '%s' failed", hex_byte);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
*p = (unsigned char) v;
|
|
||||||
|
|
||||||
p++;
|
p++;
|
||||||
hexstr += 2;
|
hexstr += 2;
|
||||||
len--;
|
len--;
|
||||||
|
|
Loading…
Add table
Reference in a new issue