From 81be02fc03f679004cc1174f6242dba770692659 Mon Sep 17 00:00:00 2001 From: Martin Lund Date: Mon, 23 May 2016 19:01:40 +0200 Subject: [PATCH] Added input digit checks --- src/options.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/options.c b/src/options.c index 4300e41..57fbbdc 100644 --- a/src/options.c +++ b/src/options.c @@ -67,6 +67,22 @@ void print_help(char *argv[]) printf("\n"); } +long string_to_long(char *string) +{ + long result; + char *end_token; + + errno = 0; + result = strtol(string, &end_token, 10); + if ((errno != 0) || (*end_token != 0)) + { + error_printf("Invalid digit"); + exit(EXIT_FAILURE); + } + + return result; +} + void parse_options(int argc, char *argv[]) { int c; @@ -117,11 +133,11 @@ void parse_options(int argc, char *argv[]) break; case 'b': - option.baudrate = atoi(optarg); + option.baudrate = string_to_long(optarg); break; case 'd': - option.databits = atoi(optarg); + option.databits = string_to_long(optarg); break; case 'f': @@ -129,7 +145,7 @@ void parse_options(int argc, char *argv[]) break; case 's': - option.stopbits = atoi(optarg); + option.stopbits = string_to_long(optarg); break; case 'p': @@ -137,7 +153,7 @@ void parse_options(int argc, char *argv[]) break; case 'o': - option.output_delay = atoi(optarg); + option.output_delay = string_to_long(optarg); break; case 'n':