From 20cc714980c65f0035ae8dc60a562d6f86530af1 Mon Sep 17 00:00:00 2001 From: Di-an Jan Date: Fri, 21 Nov 2008 13:09:16 -0800 Subject: [PATCH] Implement no-XXX arguments for --warnings, --report, --trace. * src/getargs.c (flags_argmatch): Handles no-XXX. Fix typo in doxygen comment. (cherry picked from commit 4182a0a18681fe4808f474441d62c5d2489e24e4) --- ChangeLog | 6 ++++++ src/getargs.c | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 53dfb150..97c0906d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-11-21 Di-an Jan + + Implement no-XXX arguments for --warnings, --report, --trace. + * src/getargs.c (flags_argmatch): Handles no-XXX. + Fix typo in doxygen comment. + 2011-03-20 Joel E. Denny doc: fix confusing citation of LAC publication. diff --git a/src/getargs.c b/src/getargs.c index 2408550c..d65cfc09 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -87,10 +87,12 @@ char *program_name; * \param keys array of valid subarguments. * \param values array of corresponding (int) values. * \param flags the flags to update - * \param args colon separated list of effective subarguments to decode. + * \param args comma separated list of effective subarguments to decode. * If 0, then activate all the flags. * - * The special value 0 resets the flags to 0. + * If VALUE != 0 then KEY sets flags and no-KEY clears them. + * If VALUE == 0 then KEY clears all flags and no-KEY sets all flags. + * Thus no-none = all and no-all = none. */ static void flags_argmatch (const char *option, @@ -102,11 +104,18 @@ flags_argmatch (const char *option, args = strtok (args, ","); while (args) { - int value = XARGMATCH (option, args, keys, values); + int no = strncmp (args, "no-", 3) == 0 ? 3 : 0; + int value = XARGMATCH (option, args + no, keys, values); if (value == 0) - *flags = 0; + if (no) + *flags = ~0; + else + *flags = 0; else - *flags |= value; + if (no) + *flags &= ~value; + else + *flags |= value; args = strtok (NULL, ","); } } -- 2.45.2