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);  | 
