aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2021-08-15 04:56:03 -0500
committerRob Landley <rob@landley.net>2021-08-15 04:56:03 -0500
commit368ee96fb18d82f75e6bc5394edf1e143394b827 (patch)
tree1db3cb723cddf7aa396e95d0e3e1ffcbd28a1674 /lib
parent0b00ea7fb8f5be7089815d731251ee20d6dddaab (diff)
downloadtoybox-368ee96fb18d82f75e6bc5394edf1e143394b827.tar.gz
Samanta Navarro pointed out leftover 32 bit flag limitation in argument groups.
Diffstat (limited to 'lib')
-rw-r--r--lib/args.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/args.c b/lib/args.c
index ba8b465c..6d768a62 100644
--- a/lib/args.c
+++ b/lib/args.c
@@ -342,7 +342,7 @@ static int parse_optflaglist(struct getoptflagstate *gof)
// Parse trailing group indicators
while (*options) {
- unsigned bits = 0;
+ unsigned long long bits = 0;
if (CFG_TOYBOX_DEBUG && *options != '[') error_exit("trailing %s", options);
@@ -354,20 +354,20 @@ static int parse_optflaglist(struct getoptflagstate *gof)
// Don't advance past ] but do process it once in loop.
while (*options++ != ']') {
struct opts *opt;
- int i;
+ long long ll;
if (CFG_TOYBOX_DEBUG && !*options) error_exit("[ without ]");
// Find this option flag (in previously parsed struct opt)
- for (i=0, opt = gof->opts; ; i++, opt = opt->next) {
+ for (ll = 1, opt = gof->opts; ; ll <<= 1, opt = opt->next) {
if (*options == ']') {
if (!opt) break;
- if (bits&(1<<i)) opt->dex[idx] |= bits&~(1<<i);
+ if (bits&ll) opt->dex[idx] |= bits&~ll;
} else {
if (*options==1) break;
if (CFG_TOYBOX_DEBUG && !opt)
error_exit("[] unknown target %c", *options);
if (opt->c == *options) {
- bits |= 1<<i;
+ bits |= ll;
break;
}
}