diff --git a/plugins/libplugin.c b/plugins/libplugin.c index f589b2b7e..7653a40cd 100644 --- a/plugins/libplugin.c +++ b/plugins/libplugin.c @@ -797,6 +797,25 @@ char *u64_option(const char *arg, u64 *i) return NULL; } +char *u32_option(const char *arg, u32 *i) +{ + char *endp; + u64 n; + + errno = 0; + n = strtoul(arg, &endp, 0); + if (*endp || !arg[0]) + return tal_fmt(NULL, "'%s' is not a number", arg); + if (errno) + return tal_fmt(NULL, "'%s' is out of range", arg); + + *i = n; + if (*i != n) + return tal_fmt(NULL, "'%s' is too large (overflow)", arg); + + return NULL; +} + char *charp_option(const char *arg, char **p) { *p = tal_strdup(NULL, arg); diff --git a/plugins/libplugin.h b/plugins/libplugin.h index 1d6bdb3b5..18da74066 100644 --- a/plugins/libplugin.h +++ b/plugins/libplugin.h @@ -234,6 +234,7 @@ void plugin_log(struct plugin *p, enum log_level l, const char *fmt, ...) PRINTF /* Standard helpers */ char *u64_option(const char *arg, u64 *i); +char *u32_option(const char *arg, u32 *i); char *charp_option(const char *arg, char **p); /* The main plugin runner: append with 0 or more plugin_option(), then NULL. */