From 0a8faf3e942255f9b1b4431ac3f051a6a27215a2 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 26 May 2020 14:31:37 -0700 Subject: [PATCH] scoutfs-utils: add parse_s64() Signed-off-by: Zach Brown --- utils/src/parse.c | 19 +++++++++++++++++++ utils/src/parse.h | 1 + 2 files changed, 20 insertions(+) diff --git a/utils/src/parse.c b/utils/src/parse.c index 302dc762..720e3a25 100644 --- a/utils/src/parse.c +++ b/utils/src/parse.c @@ -29,6 +29,25 @@ int parse_u64(char *str, u64 *val_ret) return 0; } +int parse_s64(char *str, s64 *val_ret) +{ + long long ll; + char *endptr = NULL; + + ll = strtoll(str, &endptr, 0); + if (*endptr != '\0' || + ((ll == LLONG_MIN || ll == LLONG_MAX) && + errno == ERANGE)) { + fprintf(stderr, "invalid 64bit value: '%s'\n", str); + *val_ret = 0; + return -EINVAL; + } + + *val_ret = ll; + + return 0; +} + int parse_u32(char *str, u32 *val_ret) { u64 val; diff --git a/utils/src/parse.h b/utils/src/parse.h index ad25f879..a3ffc48d 100644 --- a/utils/src/parse.h +++ b/utils/src/parse.h @@ -4,6 +4,7 @@ #include int parse_u64(char *str, u64 *val_ret); +int parse_s64(char *str, s64 *val_ret); int parse_u32(char *str, u32 *val_ret); int parse_timespec(char *str, struct timespec *ts);