diff options
Diffstat (limited to 'cfsysline.c')
-rw-r--r-- | cfsysline.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/cfsysline.c b/cfsysline.c index 50d0066b..c87c2a54 100644 --- a/cfsysline.c +++ b/cfsysline.c @@ -103,9 +103,10 @@ finalize_it: */ static rsRetVal parseIntVal(uchar **pp, size_t *pVal) { - uchar *p; DEFiRet; + uchar *p; size_t i; + int bWasNegative; assert(pp != NULL); assert(*pp != NULL); @@ -114,6 +115,13 @@ static rsRetVal parseIntVal(uchar **pp, size_t *pVal) skipWhiteSpace(pp); /* skip over any whitespace */ p = *pp; + if(*p == '-') { + bWasNegative = 1; + ++p; /* eat it */ + } else { + bWasNegative = 0; + } + if(!isdigit((int) *p)) { errno = 0; logerror("invalid number"); @@ -124,6 +132,9 @@ static rsRetVal parseIntVal(uchar **pp, size_t *pVal) for(i = 0 ; *p && isdigit((int) *p) ; ++p) i = i * 10 + *p - '0'; + if(bWasNegative) + i *= -1; + *pVal = i; *pp = p; |