diff options
Diffstat (limited to 'src/tool_paramhlp.c')
-rw-r--r-- | src/tool_paramhlp.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c index 2f43932ec..a2f20cb17 100644 --- a/src/tool_paramhlp.c +++ b/src/tool_paramhlp.c @@ -129,14 +129,13 @@ void cleanarg(char *str) * getparameter a lot, we must check it for NULL before accessing the str * data. */ - -ParameterError str2num(long *val, const char *str) +static ParameterError getnum(long *val, const char *str, int base) { if(str) { char *endptr = NULL; long num; errno = 0; - num = strtol(str, &endptr, 10); + num = strtol(str, &endptr, base); if(errno == ERANGE) return PARAM_NUMBER_TOO_LARGE; if((endptr != str) && (endptr == str + strlen(str))) { @@ -147,6 +146,24 @@ ParameterError str2num(long *val, const char *str) return PARAM_BAD_NUMERIC; /* badness */ } +ParameterError str2num(long *val, const char *str) +{ + return getnum(val, str, 10); +} + +ParameterError oct2nummax(long *val, const char *str, long max) +{ + ParameterError result = getnum(val, str, 8); + if(result != PARAM_OK) + return result; + else if(*val > max) + return PARAM_NUMBER_TOO_LARGE; + else if(*val < 0) + return PARAM_NEGATIVE_NUMERIC; + + return PARAM_OK; +} + /* * Parse the string and write the long in the given address. Return PARAM_OK * on success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS! @@ -158,7 +175,7 @@ ParameterError str2num(long *val, const char *str) ParameterError str2unum(long *val, const char *str) { - ParameterError result = str2num(val, str); + ParameterError result = getnum(val, str, 10); if(result != PARAM_OK) return result; if(*val < 0) |