]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/blobdiff - lib/utils.c
utils: add s32 parser
[lisovros/iproute2_canprio.git] / lib / utils.c
index 1b4222245e4c890d7dbfd7f3aa6a611ed5024a05..d80f79b4fa26c690acc227ec932235f1e9f6521e 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/pkt_sched.h>
 #include <time.h>
 #include <sys/time.h>
+#include <errno.h>
 
 
 #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;
@@ -700,7 +719,7 @@ ssize_t getcmdline(char **linep, size_t *lenp, FILE *in)
        while ((cp = strstr(*linep, "\\\n")) != NULL) {
                char *line1 = NULL;
                size_t len1 = 0;
-               size_t cc1;
+               ssize_t cc1;
 
                if ((cc1 = getline(&line1, &len1, in)) < 0) {
                        fprintf(stderr, "Missing continuation line\n");