diff options
author | Rob Landley <rob@landley.net> | 2014-08-15 18:53:01 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2014-08-15 18:53:01 -0500 |
commit | 845c8da42a505835c67e2dff98353a7205e555a5 (patch) | |
tree | 890a3c9cff704f94e088339af60f6403bd9a828a /lib/args.c | |
parent | 3b5b19e7bf4598536bc7ef501598c0f6e28e4e5a (diff) | |
download | toybox-845c8da42a505835c67e2dff98353a7205e555a5.tar.gz |
Fix bug reported by Ashwini Sharma: [-abc] syntax to switch off a command forget
s _all_ saved command line arguments in GLOBALS(), not just for the command bein
g dropped.
Diffstat (limited to 'lib/args.c')
-rw-r--r-- | lib/args.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -138,15 +138,18 @@ static int gotflag(struct getoptflagstate *gof, struct opts *opt) error_exit("Unknown option %s", gof->arg); } - // Set flags + // Might enabling this switch off something else? if (toys.optflags & opt->dex[0]) { struct opts *clr; unsigned i = 1; + // Forget saved argument for flag we switch back off for (clr=gof->opts, i=1; clr; clr = clr->next, i<<=1) - if (clr->arg && (i & toys.optflags)) *clr->arg = 0; + if (clr->arg && (i & toys.optflags & opt->dex[0])) *clr->arg = 0; toys.optflags &= ~opt->dex[0]; } + + // Set flags toys.optflags |= opt->dex[1]; gof->excludes |= opt->dex[2]; if (opt->flags&2) gof->stopearly=2; |