diff options
Diffstat (limited to 'tooling/libmkfs')
| -rw-r--r-- | tooling/libmkfs/mkfs.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/tooling/libmkfs/mkfs.h b/tooling/libmkfs/mkfs.h index 1765e1d4..31f7a26a 100644 --- a/tooling/libmkfs/mkfs.h +++ b/tooling/libmkfs/mkfs.h @@ -34,10 +34,17 @@ namespace detail { } inline bool parse_signed(const std::string& opt, long& out, int base = 10) { - if (opt.empty()) return false; + out = 0L; + + if (opt.empty()) return true; + char* endptr = nullptr; long val = std::strtol(opt.c_str(), &endptr, base); - if (endptr == opt.c_str() || *endptr != '\0' || val < 0) return false; + auto err = errno; + + if (err == ERANGE || err == EINVAL) return false; + if (endptr == opt.c_str() || *endptr != '\0') return false; + out = val; return true; } |
