From 9a9846e2f045cd2c7b7cfdb5fed24108a2d9becb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Mon, 17 Jun 2019 13:11:07 +0200 Subject: [PATCH] utils/cache_gc lint: stricter parsing of CLI integers For example, "10foo" will no longer be accepted as number 10. --- utils/cache_gc/main.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/utils/cache_gc/main.c b/utils/cache_gc/main.c index 72ce13798..de5da04c3 100644 --- a/utils/cache_gc/main.c +++ b/utils/cache_gc/main.c @@ -40,6 +40,17 @@ static void print_help() printf(" -n (= dry run)\n"); } +static long get_nonneg_optarg() +{ + char *end; + const long result = strtol(optarg, &end, 10); + if (result >= 0 && end && *end == '\0') + return result; + // not OK + print_help(); + exit(2); +} + int main(int argc, char *argv[]) { printf("Knot Resolver Cache Garbage Collector v. %s\n", KR_CACHE_GC_VERSION); @@ -62,31 +73,29 @@ int main(int argc, char *argv[]) case 'c': cfg.cache_path = optarg; break; -#define get_nonneg_optarg(to) do { if (atol(optarg) < 0) { print_help(); return 2; } to = atol(optarg); } while (0) case 'd': - get_nonneg_optarg(cfg.gc_interval); + cfg.gc_interval = get_nonneg_optarg(); cfg.gc_interval *= 1000; break; case 'l': - get_nonneg_optarg(cfg.rw_txn_items); + cfg.rw_txn_items = get_nonneg_optarg(); break; case 'm': - get_nonneg_optarg(cfg.rw_txn_duration); + cfg.rw_txn_duration = get_nonneg_optarg(); break; case 'u': - get_nonneg_optarg(cfg.cache_max_usage); + cfg.cache_max_usage = get_nonneg_optarg(); break; case 'f': - get_nonneg_optarg(cfg.cache_to_be_freed); + cfg.cache_to_be_freed = get_nonneg_optarg(); break; case 'w': - get_nonneg_optarg(cfg.rw_txn_delay); + cfg.rw_txn_delay = get_nonneg_optarg(); break; case 't': - get_nonneg_optarg(cfg.temp_keys_space); + cfg.temp_keys_space = get_nonneg_optarg(); cfg.temp_keys_space *= 1048576; break; -#undef get_nonneg_optarg case 'n': cfg.dry_run = true; break; -- 2.47.2