Allow hex numbers to be used in config data

This allows the 0x* format of hexadecimal integers to be used as config
integers.
This commit is contained in:
jp9000
2014-11-10 01:08:23 -08:00
parent 397dda78f8
commit 5888085a8e

View File

@@ -533,12 +533,34 @@ const char *config_get_string(const config_t *config, const char *section,
return item->value;
}
static inline int64_t str_to_int64(const char *str)
{
if (!str || !*str)
return 0;
if (str[0] == '0' && str[1] == 'x')
return strtoll(str + 2, NULL, 16);
else
return strtoll(str, NULL, 10);
}
static inline uint64_t str_to_uint64(const char *str)
{
if (!str || !*str)
return 0;
if (str[0] == '0' && str[1] == 'x')
return strtoull(str + 2, NULL, 16);
else
return strtoull(str, NULL, 10);
}
int64_t config_get_int(const config_t *config, const char *section,
const char *name)
{
const char *value = config_get_string(config, section, name);
if (value)
return strtoll(value, NULL, 10);
return str_to_int64(value);
return 0;
}
@@ -548,7 +570,7 @@ uint64_t config_get_uint(const config_t *config, const char *section,
{
const char *value = config_get_string(config, section, name);
if (value)
return strtoul(value, NULL, 10);
return str_to_uint64(value);
return 0;
}
@@ -559,7 +581,7 @@ bool config_get_bool(const config_t *config, const char *section,
const char *value = config_get_string(config, section, name);
if (value)
return astrcmpi(value, "true") == 0 ||
strtoul(value, NULL, 10);
!!str_to_uint64(value);
return false;
}
@@ -591,7 +613,7 @@ int64_t config_get_default_int(const config_t *config, const char *section,
{
const char *value = config_get_default_string(config, section, name);
if (value)
return strtoll(value, NULL, 10);
return str_to_int64(value);
return 0;
}
@@ -601,7 +623,7 @@ uint64_t config_get_default_uint(const config_t *config, const char *section,
{
const char *value = config_get_default_string(config, section, name);
if (value)
return strtoul(value, NULL, 10);
return str_to_uint64(value);
return 0;
}
@@ -612,7 +634,7 @@ bool config_get_default_bool(const config_t *config, const char *section,
const char *value = config_get_default_string(config, section, name);
if (value)
return astrcmpi(value, "true") == 0 ||
strtoul(value, NULL, 10);
!!str_to_uint64(value);
return false;
}