diff options
| author | René Scharfe <l.s.r@web.de> | 2025-07-09 11:45:53 +0200 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2025-07-09 08:39:46 -0700 |
| commit | feeebbf1b7d5ed8761355d354e9529c791b77e7d (patch) | |
| tree | bf14d162a8587fe24b9cece9a4c4abc21a5245ef /parse-options.c | |
| parent | 5228211c4b92052c0a38f2ab67cd0b87a7baec30 (diff) | |
| download | git-feeebbf1b7d5ed8761355d354e9529c791b77e7d.tar.gz | |
parse-options: add precision handling for OPTION_NEGBIT
Similar to 09705696f7 (parse-options: introduce precision handling for
`OPTION_INTEGER`, 2025-04-17) support value variables of different sizes
for OPTION_NEGBIT. Do that by requiring their "precision" to be set,
casting their "value" pointer accordingly and checking whether the value
fits.
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'parse-options.c')
| -rw-r--r-- | parse-options.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/parse-options.c b/parse-options.c index b5c877d5e1..ba89dc4d09 100644 --- a/parse-options.c +++ b/parse-options.c @@ -157,11 +157,14 @@ static enum parse_opt_result do_get_value(struct parse_opt_ctx_t *p, } case OPTION_NEGBIT: + { + intmax_t value = get_int_value(opt, flags); if (unset) - *(int *)opt->value |= opt->defval; + value |= opt->defval; else - *(int *)opt->value &= ~opt->defval; - return 0; + value &= ~opt->defval; + return set_int_value(opt, flags, value); + } case OPTION_BITOP: if (unset) @@ -643,11 +646,11 @@ static void parse_options_check(const struct option *opts) switch (opts->type) { case OPTION_SET_INT: case OPTION_BIT: + case OPTION_NEGBIT: if (!signed_int_fits(opts->defval, opts->precision)) optbug(opts, "has invalid defval"); /* fallthru */ case OPTION_COUNTUP: - case OPTION_NEGBIT: case OPTION_NUMBER: case OPTION_BITOP: if ((opts->flags & PARSE_OPT_OPTARG) || |
