Add safe_hextou32()

This commit is contained in:
Julien BLACHE 2010-05-05 19:03:53 +02:00
parent 6867ae4c16
commit f38ff924d7
2 changed files with 39 additions and 0 deletions

View File

@ -109,6 +109,42 @@ safe_atou32(const char *str, uint32_t *val)
return 0;
}
int
safe_hextou32(const char *str, uint32_t *val)
{
char *end;
unsigned long intval;
errno = 0;
intval = strtoul(str, &end, 16);
if (((errno == ERANGE) && (intval == ULONG_MAX))
|| ((errno != 0) && (intval == 0)))
{
DPRINTF(E_DBG, L_MISC, "Invalid integer in string (%s): %s\n", str, strerror(errno));
return -1;
}
if (end == str)
{
DPRINTF(E_DBG, L_MISC, "No integer found in string (%s)\n", str);
return -1;
}
if (intval > UINT32_MAX)
{
DPRINTF(E_DBG, L_MISC, "Integer value too large (%s)\n", str);
return -1;
}
*val = (uint32_t)intval;
return 0;
}
int
safe_atoi64(const char *str, int64_t *val)
{

View File

@ -10,6 +10,9 @@ safe_atoi32(const char *str, int32_t *val);
int
safe_atou32(const char *str, uint32_t *val);
int
safe_hextou32(const char *str, uint32_t *val);
int
safe_atoi64(const char *str, int64_t *val);