|
|
@@ -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;
|
|
|
}
|