diff --git a/src/common.c b/src/common.c index fcb9742..8ec6646 100644 --- a/src/common.c +++ b/src/common.c @@ -1417,6 +1417,15 @@ set_boolean_if_valid (bool *out, const char *s) return true; } +static bool +xstrtoul (unsigned long *out, const char *s, int base) +{ + char *end; + errno = 0; + *out = strtoul (s, &end, base); + return errno == 0 && !*end && end != s; +} + static bool read_line (FILE *fp, struct str *s) { diff --git a/src/zyklonb.c b/src/zyklonb.c index a57b8c4..3d8d388 100644 --- a/src/zyklonb.c +++ b/src/zyklonb.c @@ -1418,10 +1418,8 @@ irc_try_reconnect (struct bot_context *ctx) const char *delay_str = str_map_find (&ctx->config, "reconnect_delay"); hard_assert (delay_str != NULL); // We have a default value for this - char *end_ptr; - errno = 0; - long delay = strtol (delay_str, &end_ptr, 10); - if (errno != 0 || end_ptr == delay_str || *end_ptr) + unsigned long delay; + if (!xstrtoul (&delay, delay_str, 10)) { print_error ("invalid configuration value for `%s'", "reconnect_delay");