From 845c8da42a505835c67e2dff98353a7205e555a5 Mon Sep 17 00:00:00 2001
From: Rob Landley <rob@landley.net>
Date: Fri, 15 Aug 2014 18:53:01 -0500
Subject: 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.

---
 lib/args.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/args.c b/lib/args.c
index 16eb48ad..d0b483af 100644
--- a/lib/args.c
+++ b/lib/args.c
@@ -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;
-- 
cgit v1.2.3