diff options
Diffstat (limited to 'src/tool_paramhlp.c')
-rw-r--r-- | src/tool_paramhlp.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c index d23245046..86b8a1df5 100644 --- a/src/tool_paramhlp.c +++ b/src/tool_paramhlp.c @@ -188,6 +188,48 @@ ParameterError str2unum(long *val, const char *str) } /* + * Parse the string and write the double in the given address. Return PARAM_OK + * on success, otherwise a parameter specific error enum. + * + * Since this function gets called with the 'nextarg' pointer from within the + * getparameter a lot, we must check it for NULL before accessing the str + * data. + */ + +ParameterError str2double(double *val, const char *str) +{ + if(str) { + char *endptr; + double num = strtod(str, &endptr); + if((endptr != str) && (endptr == str + strlen(str))) { + *val = num; + return PARAM_OK; /* Ok */ + } + } + return PARAM_BAD_NUMERIC; /* badness */ +} + +/* + * Parse the string and write the double in the given address. Return PARAM_OK + * on success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS! + * + * Since this function gets called with the 'nextarg' pointer from within the + * getparameter a lot, we must check it for NULL before accessing the str + * data. + */ + +ParameterError str2udouble(double *val, const char *str) +{ + ParameterError result = str2double(val, str); + if(result != PARAM_OK) + return result; + if(*val < 0) + return PARAM_NEGATIVE_NUMERIC; + + return PARAM_OK; +} + +/* * Parse the string and modify the long in the given address. Return * non-zero on failure, zero on success. * |