Message ID | 20141127153740.GA10402@domone |
---|---|
State | New |
Headers | show |
ping. On Thu, Nov 27, 2014 at 04:37:40PM +0100, wizard wrote: > On Wed, Nov 26, 2014 at 11:06:23AM +0100, Andreas Schwab wrote: > > Ondřej Bílka <neleai@seznam.cz> writes: > > > > > + int invert = 0; > > > + if (strncmp (cp, "no-", 3)) > > > + { > > > + cp += 3; > > > + invert = 1; > > > + } > > > + > > > for (i = 0; i < noptions; ++i) > > > if (strncmp (cp, options[i].str, options[i].len) == 0) > > > { > > > - if (options[i].clear) > > > - statp->options &= options[i].flag; > > > + if (options[i].clear ^ invert) > > > + statp->options &= options[i].flag ^ invert; > > > else > > > - statp->options |= options[i].flag; > > > + statp->options |= options[i].flag ^ invert; > > > > That doesn't work. > > > Oops, somewhat included older patch. I meant to send this. > > [BZ #14799] > * resolv/res_init.c (res_setoptions): Detect no- prefix to > disable option. > > diff --git a/resolv/res_init.c b/resolv/res_init.c > index ea133f8..9ea43e9 100644 > --- a/resolv/res_init.c > +++ b/resolv/res_init.c > @@ -533,26 +533,32 @@ res_setoptions(res_state statp, const char *options, const char *source) { > #define STRnLEN(str) str, sizeof (str) - 1 > { STRnLEN ("inet6"), 0, RES_USE_INET6 }, > { STRnLEN ("ip6-bytestring"), 0, RES_USEBSTRING }, > - { STRnLEN ("no-ip6-dotint"), 0, RES_NOIP6DOTINT }, > { STRnLEN ("ip6-dotint"), 1, ~RES_NOIP6DOTINT }, > { STRnLEN ("rotate"), 0, RES_ROTATE }, > - { STRnLEN ("no-check-names"), 0, RES_NOCHECKNAME }, > + { STRnLEN ("check-names"), 1, ~RES_NOCHECKNAME }, > { STRnLEN ("edns0"), 0, RES_USE_EDNS0 }, > { STRnLEN ("single-request-reopen"), 0, RES_SNGLKUPREOP }, > { STRnLEN ("single-request"), 0, RES_SNGLKUP }, > { STRnLEN ("no_tld_query"), 0, RES_NOTLDQUERY }, > - { STRnLEN ("no-tld-query"), 0, RES_NOTLDQUERY }, > + { STRnLEN ("tld-query"), 1, ~RES_NOTLDQUERY }, > { STRnLEN ("use-vc"), 0, RES_USEVC } > }; > #define noptions (sizeof (options) / sizeof (options[0])) > int i; > + unsigned long int invert = 0; > + if (strncmp (cp, "no-", 3) == 0) > + { > + cp += 3; > + invert = ~0; > + } > + > for (i = 0; i < noptions; ++i) > if (strncmp (cp, options[i].str, options[i].len) == 0) > { > - if (options[i].clear) > - statp->options &= options[i].flag; > + if (options[i].clear ^ invert) > + statp->options &= options[i].flag ^ invert; > else > - statp->options |= options[i].flag; > + statp->options |= options[i].flag ^ invert; > break; > } > if (i == noptions) {
That doesn't work. Andreas.
diff --git a/resolv/res_init.c b/resolv/res_init.c index ea133f8..9ea43e9 100644 --- a/resolv/res_init.c +++ b/resolv/res_init.c @@ -533,26 +533,32 @@ res_setoptions(res_state statp, const char *options, const char *source) { #define STRnLEN(str) str, sizeof (str) - 1 { STRnLEN ("inet6"), 0, RES_USE_INET6 }, { STRnLEN ("ip6-bytestring"), 0, RES_USEBSTRING }, - { STRnLEN ("no-ip6-dotint"), 0, RES_NOIP6DOTINT }, { STRnLEN ("ip6-dotint"), 1, ~RES_NOIP6DOTINT }, { STRnLEN ("rotate"), 0, RES_ROTATE }, - { STRnLEN ("no-check-names"), 0, RES_NOCHECKNAME }, + { STRnLEN ("check-names"), 1, ~RES_NOCHECKNAME }, { STRnLEN ("edns0"), 0, RES_USE_EDNS0 }, { STRnLEN ("single-request-reopen"), 0, RES_SNGLKUPREOP }, { STRnLEN ("single-request"), 0, RES_SNGLKUP }, { STRnLEN ("no_tld_query"), 0, RES_NOTLDQUERY }, - { STRnLEN ("no-tld-query"), 0, RES_NOTLDQUERY }, + { STRnLEN ("tld-query"), 1, ~RES_NOTLDQUERY }, { STRnLEN ("use-vc"), 0, RES_USEVC } }; #define noptions (sizeof (options) / sizeof (options[0])) int i; + unsigned long int invert = 0; + if (strncmp (cp, "no-", 3) == 0) + { + cp += 3; + invert = ~0; + } + for (i = 0; i < noptions; ++i) if (strncmp (cp, options[i].str, options[i].len) == 0) { - if (options[i].clear) - statp->options &= options[i].flag; + if (options[i].clear ^ invert) + statp->options &= options[i].flag ^ invert; else - statp->options |= options[i].flag; + statp->options |= options[i].flag ^ invert; break; } if (i == noptions) {