On Fri, 2006-04-28 at 08:34 +1000, Robert Collins wrote: > On Thu, 2006-04-27 at 19:07 +0000, [EMAIL PROTECTED] wrote: > > wessels 2006/04/27 13:07:16 MDT > > > > Modified files: > > src cache_cf.cc > > Log: > > bugfix: ICAPConfig calls aclParseAccessLine(), which now takes a > > ConfigParser argument. Use the LegacyParser from cache_cf.cc, but > > we need to make it global instead of static. > > > > Revision Changes Path > > 1.492 +2 -2 squid3/src/cache_cf.cc > > I'm trying to decouple the parser from the config with the LegacyParser: > adding the parser as a common parameter to the modular parser like: > > aclParseAccessLine(LegacyParser, head); > > For example in cache_cf.cc: > > static void > parse_icap_service_type(ICAPConfig * cfg) > { > cfg->parseICAPService(LegacyParser); > } > > > Is that OK?
Attached a patch to make it so. The point of this is to allow testing of configuration using modules without linking cache_cf.o in - because that drags in all of squid by reference. Instead the tokeniser only is brought in. Rob -- GPG key available at: <http://www.robertcollins.net/keys.txt>.
=== modified file 'a/src/ICAP/ICAPConfig.cc' --- a/src/ICAP/ICAPConfig.cc +++ b/src/ICAP/ICAPConfig.cc @@ -34,8 +34,8 @@ #include "squid.h" +#include "ACL.h" #include "ConfigParser.h" -#include "ACL.h" #include "Store.h" #include "Array.h" // really Vector #include "ICAPConfig.h" @@ -45,9 +45,7 @@ #include "ACLChecklist.h" #include "wordlist.h" -extern ConfigParser LegacyParser; // from cache_cf.cc ICAPConfig TheICAPConfig; -extern ConfigParser LegacyParser; // found in cache_cf.cc ICAPServiceRep::Pointer ICAPConfig::findService(const String& key) @@ -352,7 +350,7 @@ }; void -ICAPConfig::parseICAPAccess() +ICAPConfig::parseICAPAccess(ConfigParser &parser) { String aKey; ConfigParser::ParseString(&aKey); @@ -362,7 +360,7 @@ fatalf("Did not find ICAP class '%s' referenced on line %d\n", aKey.buf(), config_lineno); - aclParseAccessLine(LegacyParser, &theClass->accessList); + aclParseAccessLine(parser, &theClass->accessList); }; void === modified file 'a/src/ICAP/ICAPConfig.h' --- a/src/ICAP/ICAPConfig.h +++ b/src/ICAP/ICAPConfig.h @@ -39,6 +39,8 @@ #include "ICAPServiceRep.h" class acl_access; + +class ConfigParser; class ICAPConfig; @@ -116,7 +118,7 @@ void freeICAPClass(void); void dumpICAPClass(StoreEntry *, const char *); - void parseICAPAccess(void); + void parseICAPAccess(ConfigParser &parser); void freeICAPAccess(void); void dumpICAPAccess(StoreEntry *, const char *); === modified file 'a/src/cache_cf.cc' --- a/src/cache_cf.cc +++ b/src/cache_cf.cc @@ -145,8 +145,12 @@ #endif /* USE_SSL */ static void parse_b_size_t(size_t * var); -/* a parser for legacy code that uses the global approach */ -ConfigParser LegacyParser = ConfigParser(); +/* a parser for legacy code that uses the global approach + * This is static so that it is only exposed to cache_cf. + * Other modules needing access to a ConfigParser should + * have it provided to them in their parserFOO methods. + */ +static ConfigParser LegacyParser = ConfigParser(); void self_destruct(void) @@ -3260,7 +3264,7 @@ static void parse_icap_access_type(ICAPConfig * cfg) { - cfg->parseICAPAccess(); + cfg->parseICAPAccess(LegacyParser); } static void
signature.asc
Description: This is a digitally signed message part