summaryrefslogtreecommitdiff
path: root/src/tool_paramhlp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tool_paramhlp.c')
-rw-r--r--src/tool_paramhlp.c25
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)