On Sun, Jun 29, 2025 at 01:50:39PM +0200, René Scharfe wrote: > diff --git a/parse-options.c b/parse-options.c > index da07a000a3..bbb68603cc 100644 > --- a/parse-options.c > +++ b/parse-options.c > @@ -85,6 +85,36 @@ static intmax_t get_int_value(const struct option *opt) > } > } > > +static enum parse_opt_result set_int_value(const struct option *opt, > + enum opt_parsed flags, > + intmax_t value) > +{ > + switch (opt->precision) { > + case sizeof(int8_t): > + *(int8_t *)opt->value = value; > + return 0; > + case sizeof(int16_t): > + *(int16_t *)opt->value = value; > + return 0; > + case sizeof(int32_t): > + *(int32_t *)opt->value = value; > + return 0; > + case sizeof(int64_t): > + *(int64_t *)opt->value = value; > + return 0; > + default: > + BUG("invalid precision for option %s", optname(opt, flags)); > + } > +} The function only ever dies or returns successfully, so can't we make it return nothing instead? On the other hand it does make a couple of callsites a bit nicer to read. > +static int signed_int_fits(intmax_t value, size_t size) > +{ > + size_t bits = size * CHAR_BIT; > + intmax_t upper_bound = INTMAX_MAX >> (bitsizeof(intmax_t) - bits); > + intmax_t lower_bound = -upper_bound - 1; > + return lower_bound <= value && value <= upper_bound; > +} > + Should we s/size/precision/ so that it's clear what kind of size this exactly is? Patrick