mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-25 09:30:16 +01:00
shared: add _nm_utils_ascii_str_to_uint64() helper
This commit is contained in:
parent
9cf64e2ee2
commit
c0d292d255
2 changed files with 46 additions and 1 deletions
|
|
@ -608,6 +608,50 @@ _nm_utils_ascii_str_to_int64 (const char *str, guint base, gint64 min, gint64 ma
|
|||
return v;
|
||||
}
|
||||
|
||||
guint64
|
||||
_nm_utils_ascii_str_to_uint64 (const char *str, guint base, guint64 min, guint64 max, guint64 fallback)
|
||||
{
|
||||
guint64 v;
|
||||
const char *s = NULL;
|
||||
|
||||
if (str) {
|
||||
while (g_ascii_isspace (str[0]))
|
||||
str++;
|
||||
}
|
||||
if (!str || !str[0]) {
|
||||
errno = EINVAL;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
v = g_ascii_strtoull (str, (char **) &s, base);
|
||||
|
||||
if (errno != 0)
|
||||
return fallback;
|
||||
if (s[0] != '\0') {
|
||||
while (g_ascii_isspace (s[0]))
|
||||
s++;
|
||||
if (s[0] != '\0') {
|
||||
errno = EINVAL;
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
if (v > max || v < min) {
|
||||
errno = ERANGE;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
if ( v != 0
|
||||
&& str[0] == '-') {
|
||||
/* I don't know why, but g_ascii_strtoull() accepts minus signs ("-2" gives 18446744073709551614).
|
||||
* For "-0" that is OK, but otherwise not. */
|
||||
errno = ERANGE;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* like nm_strcmp_p(), suitable for g_ptr_array_sort_with_data().
|
||||
|
|
|
|||
|
|
@ -408,7 +408,8 @@ gboolean nm_utils_parse_inaddr_prefix (int addr_family,
|
|||
char **out_addr,
|
||||
int *out_prefix);
|
||||
|
||||
gint64 _nm_utils_ascii_str_to_int64 (const char *str, guint base, gint64 min, gint64 max, gint64 fallback);
|
||||
gint64 _nm_utils_ascii_str_to_int64 (const char *str, guint base, gint64 min, gint64 max, gint64 fallback);
|
||||
guint64 _nm_utils_ascii_str_to_uint64 (const char *str, guint base, guint64 min, guint64 max, guint64 fallback);
|
||||
|
||||
int _nm_utils_ascii_str_to_bool (const char *str,
|
||||
int default_value);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue