From 30d10db5667d3ca86917ca86c1a65cfcc45965f9 Mon Sep 17 00:00:00 2001 From: Hagen Paul Pfeifer Date: Tue, 20 Dec 2011 11:28:46 +0000 Subject: [PATCH] utils: add s32 parser Signed-off-by: Hagen Paul Pfeifer --- include/utils.h | 1 + lib/utils.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/utils.h b/include/utils.h index 47f8e07..496db68 100644 --- a/include/utils.h +++ b/include/utils.h @@ -85,6 +85,7 @@ extern int get_time_rtt(unsigned *val, const char *arg, int *raw); #define get_short get_s16 extern int get_u64(__u64 *val, const char *arg, int base); extern int get_u32(__u32 *val, const char *arg, int base); +extern int get_s32(__s32 *val, const char *arg, int base); extern int get_u16(__u16 *val, const char *arg, int base); extern int get_s16(__s16 *val, const char *arg, int base); extern int get_u8(__u8 *val, const char *arg, int base); diff --git a/lib/utils.c b/lib/utils.c index efaf377..d80f79b 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "utils.h" @@ -198,6 +199,24 @@ int get_u8(__u8 *val, const char *arg, int base) return 0; } +int get_s32(__s32 *val, const char *arg, int base) +{ + long res; + char *ptr; + + errno = 0; + + if (!arg || !*arg) + return -1; + res = strtol(arg, &ptr, base); + if (ptr == arg || *ptr || + ((res == LONG_MIN || res == LONG_MAX) && errno == ERANGE) || + res > INT32_MAX || res < INT32_MIN) + return -1; + *val = res; + return 0; +} + int get_s16(__s16 *val, const char *arg, int base) { long res; -- 2.39.2