diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/common-utils.c | 39 | ||||
-rw-r--r-- | libglusterfs/src/common-utils.h | 1 |
2 files changed, 40 insertions, 0 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 616c7a8ce68..acac5e05281 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -796,6 +796,39 @@ _gf_string2uint (const char *str, unsigned int *n, int base) } static int +_gf_string2double (const char *str, double *n) +{ + double value = 0.0; + char *tail = NULL; + int old_errno = 0; + + if (str == NULL || n == NULL) { + errno = EINVAL; + return -1; + } + + old_errno = errno; + errno = 0; + value = strtod (str, &tail); + + if (errno == ERANGE || errno == EINVAL) { + return -1; + } + + if (errno == 0) { + errno = old_errno; + } + + if (tail[0] != '\0') { + return -1; + } + + *n = value; + + return 0; +} + +static int _gf_string2longlong (const char *str, long long *n, int base) { long long value = 0; @@ -911,6 +944,12 @@ gf_string2uint (const char *str, unsigned int *n) return _gf_string2uint (str, n, 0); } +int +gf_string2double (const char *str, double *n) +{ + return _gf_string2double (str, n); +} + int gf_string2longlong (const char *str, long long *n) { diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 2016b51ebcb..6c7390571cd 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -281,6 +281,7 @@ int gf_string2long (const char *str, long *n); int gf_string2ulong (const char *str, unsigned long *n); int gf_string2int (const char *str, int *n); int gf_string2uint (const char *str, unsigned int *n); +int gf_string2double (const char *str, double *n); int gf_string2longlong (const char *str, long long *n); int gf_string2ulonglong (const char *str, unsigned long long *n); |