From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vinicius Costa Gomes Subject: [PATCH iproute2 net-next v1 1/6] utils: Implement get_s64() Date: Fri, 28 Sep 2018 18:10:45 -0700 Message-ID: <20180929011050.14056-2-vinicius.gomes@intel.com> References: <20180929011050.14056-1-vinicius.gomes@intel.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Cc: Vinicius Costa Gomes , jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, jesus.sanchez-palencia@intel.com, ilias.apalodimas@linaro.org, simon.fok@baesystems.com To: netdev@vger.kernel.org Return-path: Received: from mga11.intel.com ([192.55.52.93]:19995 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727344AbeI2Hhn (ORCPT ); Sat, 29 Sep 2018 03:37:43 -0400 In-Reply-To: <20180929011050.14056-1-vinicius.gomes@intel.com> Sender: netdev-owner@vger.kernel.org List-ID: Add this helper to read signed 64-bit integers from a string. Signed-off-by: Vinicius Costa Gomes --- include/utils.h | 1 + lib/utils.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/utils.h b/include/utils.h index 8cb4349e..58574a05 100644 --- a/include/utils.h +++ b/include/utils.h @@ -139,6 +139,7 @@ int get_time_rtt(unsigned *val, const char *arg, int *raw); #define get_byte get_u8 #define get_ushort get_u16 #define get_short get_s16 +int get_s64(__s64 *val, const char *arg, int base); int get_u64(__u64 *val, const char *arg, int base); int get_u32(__u32 *val, const char *arg, int base); int get_s32(__s32 *val, const char *arg, int base); diff --git a/lib/utils.c b/lib/utils.c index e87ecf31..1b84b801 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -383,6 +383,27 @@ int get_u8(__u8 *val, const char *arg, int base) return 0; } +int get_s64(__s64 *val, const char *arg, int base) +{ + long res; + char *ptr; + + errno = 0; + + if (!arg || !*arg) + return -1; + res = strtoll(arg, &ptr, base); + if (!ptr || ptr == arg || *ptr) + return -1; + if ((res == LLONG_MIN || res == LLONG_MAX) && errno == ERANGE) + return -1; + if (res > INT64_MAX || res < INT64_MIN) + return -1; + + *val = res; + return 0; +} + int get_s32(__s32 *val, const char *arg, int base) { long res; -- 2.19.0