diff --git a/lib/misc.c b/lib/misc.c index 31c44a3..1d20e1b 100644 --- a/lib/misc.c +++ b/lib/misc.c @@ -79,7 +79,7 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size) { char *endp; - loff_t end, _start; + loff_t end, _start, _size; if (!isdigit(*str)) return -1; @@ -90,7 +90,7 @@ if (!*str) { /* beginning given, but no size, assume maximum size */ - *size = ~0; + _size = ~0; goto success; } @@ -99,12 +99,13 @@ if (!isdigit(*(str + 1))) return -1; - end = strtoull_suffix(str + 1, NULL, 0); + end = strtoull_suffix(str + 1, &endp, 0); + str = endp; if (end < _start) { printf("end < start\n"); return -1; } - *size = end - _start + 1; + _size = end - _start + 1; goto success; } @@ -113,14 +114,18 @@ if (!isdigit(*(str + 1))) return -1; - *size = strtoull_suffix(str + 1, NULL, 0); + _size = strtoull_suffix(str + 1, &endp, 0); + str = endp; goto success; } return -1; success: + if (*str && !isspace(*str)) + return -1; *start = _start; + *size = _size; return 0; } EXPORT_SYMBOL(parse_area_spec);