Patch file generated Tue May 8 00:01:32 NZST 2007 from CVS branch ayjwork CVS base branch HEAD CVS repository: amosjeffries@cvs.devel.squid-cache.org:/cvsroot/squid CVS module: squid3 cvs -q rdiff -u -kk -r Z-ayjwork_merge_HEAD -r ayjwork squid3 Index: squid3/src/ACLExtUser.cc diff -u squid3/src/ACLExtUser.cc:1.8 squid3/src/ACLExtUser.cc:1.7.14.2 --- squid3/src/ACLExtUser.cc:1.8 Sat Apr 28 15:51:47 2007 +++ squid3/src/ACLExtUser.cc Wed May 2 05:53:05 2007 @@ -79,7 +79,7 @@ ACLExtUser::match(ACLChecklist *checklist) { if (checklist->request->extacl_user.size()) { - return data->match(checklist->request->extacl_user.buf()); + return data->match(checklist->request->extacl_user.c_str()); } else { return -1; } Index: squid3/src/ACLHTTPHeaderData.cc diff -u squid3/src/ACLHTTPHeaderData.cc:1.3 squid3/src/ACLHTTPHeaderData.cc:1.2.14.3 --- squid3/src/ACLHTTPHeaderData.cc:1.3 Sat Apr 28 15:51:47 2007 +++ squid3/src/ACLHTTPHeaderData.cc Wed May 2 05:53:05 2007 @@ -63,18 +63,18 @@ if (hdr == NULL) return false; - debugs(28, 3, "aclHeaderData::match: checking '" << hdrName.buf() << "'"); + debugs(28, 3, "aclHeaderData::match: checking '" << hdrName << "'"); - String value = hdrId != HDR_BAD_HDR ? hdr->getStrOrList(hdrId) : hdr->getByName(hdrName.buf()); + string value = hdrId != HDR_BAD_HDR ? hdr->getStrOrList(hdrId) : hdr->getByName(hdrName.c_str()); - return regex_rule->match(value.buf()); + return regex_rule->match(value.c_str()); } wordlist * ACLHTTPHeaderData::dump() { wordlist *W = NULL; - wordlistAdd(&W, hdrName.buf()); + wordlistAdd(&W, hdrName.c_str()); wordlist * regex_dump = regex_rule->dump(); wordlistAddWl(&W, regex_dump); wordlistDestroy(®ex_dump); @@ -87,14 +87,14 @@ char* t = strtokFile(); assert (t != NULL); hdrName = t; - hdrId = httpHeaderIdByNameDef(hdrName.buf(), strlen(hdrName.buf())); + hdrId = httpHeaderIdByNameDef(hdrName.c_str(), hdrName.size()); regex_rule->parse(); } bool ACLHTTPHeaderData::empty() const { - return (hdrId == HDR_BAD_HDR && !hdrName.buf()) || regex_rule->empty(); + return (hdrId == HDR_BAD_HDR && !hdrName.c_str()) || regex_rule->empty(); } ACLData * Index: squid3/src/ACLHTTPHeaderData.h diff -u squid3/src/ACLHTTPHeaderData.h:1.2 squid3/src/ACLHTTPHeaderData.h:1.2.14.1 --- squid3/src/ACLHTTPHeaderData.h:1.2 Sat Aug 5 05:51:07 2006 +++ squid3/src/ACLHTTPHeaderData.h Tue May 1 17:09:50 2007 @@ -53,7 +53,7 @@ private: http_hdr_type hdrId; // set if header is known - String hdrName; // always set + string hdrName; // always set ACLData * regex_rule; }; Index: squid3/src/ACLUrlPath.cc diff -u squid3/src/ACLUrlPath.cc:1.2 squid3/src/ACLUrlPath.cc:1.2.22.1 --- squid3/src/ACLUrlPath.cc:1.2 Thu Jul 10 19:13:04 2003 +++ squid3/src/ACLUrlPath.cc Wed May 2 05:53:05 2007 @@ -47,7 +47,7 @@ int ACLUrlPathStrategy::match (ACLData * &data, ACLChecklist *checklist) { - char *esc_buf = xstrdup(checklist->request->urlpath.buf()); + char *esc_buf = xstrdup(checklist->request->urlpath.c_str()); rfc1738_unescape(esc_buf); int result = data->match(esc_buf); safe_free(esc_buf); Index: squid3/src/AuthUser.cc diff -u squid3/src/AuthUser.cc:1.5 squid3/src/AuthUser.cc:1.3.4.2 --- squid3/src/AuthUser.cc:1.5 Mon Apr 30 10:51:35 2007 +++ squid3/src/AuthUser.cc Thu May 3 06:37:04 2007 @@ -143,7 +143,7 @@ if (!proxy_auth_username_cache) { /* First time around, 7921 should be big enough */ proxy_auth_username_cache = - hash_create((HASHCMP *) strcmp, 7921, hash_string); + hash_create((HASHCMP *) std::strcmp, 7921, hash_string); assert(proxy_auth_username_cache); eventAdd("User Cache Maintenance", cacheCleanup, NULL, Config.authenticateGCInterval, 1); } Index: squid3/src/CommonPool.h diff -u squid3/src/CommonPool.h:1.3 squid3/src/CommonPool.h:1.3.22.3 --- squid3/src/CommonPool.h:1.3 Mon Aug 4 19:12:48 2003 +++ squid3/src/CommonPool.h Thu May 3 06:37:05 2007 @@ -58,11 +58,11 @@ void *operator new(size_t); void operator delete (void *); static CommonPool *Factory (unsigned char _class, CompositePoolNode::Pointer&); - char const* theClassTypeLabel() const {return typeLabel.buf();} + char const* theClassTypeLabel() const { return typeLabel.c_str(); } protected: CommonPool(); - String typeLabel; + string typeLabel; }; #endif Index: squid3/src/CompositePoolNode.h diff -u squid3/src/CompositePoolNode.h:1.6 squid3/src/CompositePoolNode.h:1.6.14.1 --- squid3/src/CompositePoolNode.h:1.6 Mon Apr 18 19:14:46 2005 +++ squid3/src/CompositePoolNode.h Thu May 3 08:11:26 2007 @@ -78,7 +78,7 @@ struct IN_ADDR src_addr; AuthUserRequest *user; - String tag; + string tag; }; protected: Index: squid3/src/ConfigParser.h diff -u squid3/src/ConfigParser.h:1.6 squid3/src/ConfigParser.h:1.6.8.1 --- squid3/src/ConfigParser.h:1.6 Sun May 28 17:50:18 2006 +++ squid3/src/ConfigParser.h Tue May 1 09:09:26 2007 @@ -61,7 +61,7 @@ static void ParseUShort(u_short *var); static void ParseBool(bool *var); static void ParseString(char **var); - static void ParseString(String *var); + static void ParseString(string &var); static void ParseWordList(wordlist **list); static char * strtokFile(); }; Index: squid3/src/DelayTagged.cc diff -u squid3/src/DelayTagged.cc:1.4 squid3/src/DelayTagged.cc:1.3.24.3 --- squid3/src/DelayTagged.cc:1.4 Sat Apr 28 15:51:48 2007 +++ squid3/src/DelayTagged.cc Mon May 7 03:32:21 2007 @@ -77,7 +77,7 @@ DelayTaggedCmp(DelayTaggedBucket::Pointer const &left, DelayTaggedBucket::Pointer const &right) { /* for rate limiting, case insensitive */ - return left->tag.caseCmp(right->tag.buf()); + return strcasecmp(left->tag, right->tag); } void @@ -183,7 +183,7 @@ ::operator delete (address); } -DelayTaggedBucket::DelayTaggedBucket(String &aTag) : tag (aTag) +DelayTaggedBucket::DelayTaggedBucket(string &aTag) : tag (aTag) { debugs(77, 3, "DelayTaggedBucket::DelayTaggedBucket"); } @@ -196,11 +196,11 @@ void DelayTaggedBucket::stats (StoreEntry *entry) const { - storeAppendPrintf(entry, " %s:", tag.buf()); + storeAppendPrintf(entry, " %s:", tag.c_str()); theBucket.stats (entry); } -DelayTagged::Id::Id(DelayTagged::Pointer aDelayTagged, String &aTag) : theTagged(aDelayTagged) +DelayTagged::Id::Id(DelayTagged::Pointer aDelayTagged, string &aTag) : theTagged(aDelayTagged) { theBucket = new DelayTaggedBucket(aTag); DelayTaggedBucket::Pointer const *existing = theTagged->buckets.find(theBucket, DelayTaggedCmp); Index: squid3/src/DelayTagged.h diff -u squid3/src/DelayTagged.h:1.4 squid3/src/DelayTagged.h:1.4.24.1 --- squid3/src/DelayTagged.h:1.4 Mon Aug 4 19:12:48 2003 +++ squid3/src/DelayTagged.h Thu May 3 08:11:26 2007 @@ -58,10 +58,10 @@ void operator delete (void *); void stats(StoreEntry *)const; - DelayTaggedBucket(String &aTag); + DelayTaggedBucket(string &aTag); ~DelayTaggedBucket(); DelayBucket theBucket; - String tag; + string tag; }; class DelayTagged : public CompositePoolNode @@ -88,7 +88,7 @@ public: void *operator new(size_t); void operator delete (void *); - Id (RefCount, String &); + Id (RefCount, string &); ~Id(); virtual int bytesWanted (int min, int max) const; virtual void bytesIn(int qty); Index: squid3/src/ESI.cc diff -u squid3/src/ESI.cc:1.23 squid3/src/ESI.cc:1.22.8.3 --- squid3/src/ESI.cc:1.23 Sat Apr 28 15:51:48 2007 +++ squid3/src/ESI.cc Mon May 7 03:32:21 2007 @@ -2450,7 +2450,7 @@ */ return 0; - if (strstr (sctusable->content.buf(), "ESI/1.0")) + if (strstr (sctusable->content, "ESI/1.0")) rv = 1; httpHdrScTargetDestroy (sctusable); Index: squid3/src/ESIAssign.cc diff -u squid3/src/ESIAssign.cc:1.4 squid3/src/ESIAssign.cc:1.3.20.3 --- squid3/src/ESIAssign.cc:1.4 Sat Apr 28 15:51:48 2007 +++ squid3/src/ESIAssign.cc Thu May 3 08:03:33 2007 @@ -83,7 +83,7 @@ variable = NULL; if (unevaluatedVariable.size()) { - varState->feedData(unevaluatedVariable.buf(), unevaluatedVariable.size()); + varState->feedData(unevaluatedVariable.c_str(), unevaluatedVariable.size()); char const *result = varState->extractChar (); /* Consider activating this, when we want to evaluate variables to a @@ -117,7 +117,7 @@ if (!value) return ESI_PROCESS_COMPLETE; - varState->addVariable (name.buf(), name.size(), value); + varState->addVariable (name.c_str(), name.size(), value); value = NULL; @@ -181,12 +181,12 @@ ESIVariableExpression::~ESIVariableExpression() {} -ESIVariableExpression::ESIVariableExpression (String const &aString) : expression (aString) +ESIVariableExpression::ESIVariableExpression (string const &aString) : expression (aString) {} void ESIVariableExpression::eval (ESIVarState &state, char const *subref, char const *defaultOnEmpty) const { /* XXX: Implement evaluation of the expression */ - ESISegment::ListAppend (state.getOutput(), expression.buf(), expression.size()); + ESISegment::ListAppend (state.getOutput(), expression.c_str(), expression.size()); } Index: squid3/src/ESIAssign.h diff -u squid3/src/ESIAssign.h:1.3 squid3/src/ESIAssign.h:1.3.20.3 --- squid3/src/ESIAssign.h:1.3 Mon Aug 30 19:14:26 2004 +++ squid3/src/ESIAssign.h Thu May 3 08:03:33 2007 @@ -49,11 +49,11 @@ public: ~ESIVariableExpression(); - ESIVariableExpression (String const &value); + ESIVariableExpression (string const &value); virtual void eval (ESIVarState &state, char const *, char const *) const; private: - String expression; + string expression; }; /* ESIAssign */ @@ -81,10 +81,10 @@ void evaluateVariable(); esiTreeParentPtr parent; ESIVarState *varState; - String name; + string name; ESIVariableExpression * value; ESIElement::Pointer variable; - String unevaluatedVariable; + string unevaluatedVariable; }; MEMPROXY_CLASS_INLINE(ESIAssign) Index: squid3/src/ESICustomParser.cc diff -u squid3/src/ESICustomParser.cc:1.8 squid3/src/ESICustomParser.cc:1.7.14.2 --- squid3/src/ESICustomParser.cc:1.8 Sat Apr 28 15:51:48 2007 +++ squid3/src/ESICustomParser.cc Thu May 3 08:03:33 2007 @@ -109,7 +109,7 @@ } size_t openESITags (0); - char const *currentPos = content.buf(); + char const *currentPos = content.c_str(); size_t remainingCount = content.size(); char const *tag = NULL; @@ -302,7 +302,7 @@ ESICustomParser::errorString() const { if (error.size()) - return error.buf(); + return error.c_str(); else return "Parsing error strings not implemented"; } Index: squid3/src/ESICustomParser.h diff -u squid3/src/ESICustomParser.h:1.6 squid3/src/ESICustomParser.h:1.6.14.1 --- squid3/src/ESICustomParser.h:1.6 Sun Jul 3 19:14:11 2005 +++ squid3/src/ESICustomParser.h Thu May 3 08:03:34 2007 @@ -60,9 +60,9 @@ char const *findTag(char const *a, size_t b); ESIParserClient *theClient; - String error; + string error; /* cheap n dirty - buffer it all */ - String content; + string content; /* TODO: make a class of this type code */ ESITAG_t lastTag; }; Index: squid3/src/ESISegment.cc diff -u squid3/src/ESISegment.cc:1.5 squid3/src/ESISegment.cc:1.4.22.3 --- squid3/src/ESISegment.cc:1.5 Sat Apr 28 15:51:48 2007 +++ squid3/src/ESISegment.cc Thu May 3 03:05:07 2007 @@ -234,7 +234,7 @@ void ESISegment::dumpOne() const { - String temp; + string temp; temp.limitInit(buf, len); - debugs(86, 9, "ESISegment::dumpOne: \"" << temp.buf() << "\""); + debugs(86, 9, "ESISegment::dumpOne: \"" << temp << "\""); } Index: squid3/src/ESIVarState.cc diff -u squid3/src/ESIVarState.cc:1.8 squid3/src/ESIVarState.cc:1.7.8.3 --- squid3/src/ESIVarState.cc:1.8 Sat Apr 28 15:51:48 2007 +++ squid3/src/ESIVarState.cc Mon May 7 03:32:22 2007 @@ -318,9 +318,9 @@ } void -ESIVarState::removeVariable (String const &name) +ESIVarState::removeVariable (string const &name) { - Variable *candidate = static_cast (variables.find (name.buf(), name.size())); + Variable *candidate = static_cast (variables.find (name.c_str(), name.size())); if (candidate) { /* XXX: remove me */ @@ -335,7 +335,7 @@ void ESIVarState::addVariable(char const *name, size_t len, Variable *aVariable) { - String temp; + string temp; temp.limitInit (name, len); removeVariable (temp); variables.add(name, len, aVariable); @@ -434,10 +434,10 @@ if (!subref) s = state.header().getStr (HDR_COOKIE); else { - String S = state.header().getListMember (HDR_COOKIE, subref, ';'); + string S = state.header().getListMember (HDR_COOKIE, subref, ';'); if (S.size()) - ESISegment::ListAppend (state.getOutput(), S.buf(), S.size()); + ESISegment::ListAppend (state.getOutput(), S.c_str(), S.size()); else if (found_default) ESISegment::ListAppend (state.getOutput(), found_default, strlen (found_default)); } @@ -470,8 +470,8 @@ if (state.header().has(HDR_ACCEPT_LANGUAGE)) { if (!subref) { - String S (state.header().getList (HDR_ACCEPT_LANGUAGE)); - ESISegment::ListAppend (state.getOutput(), S.buf(), S.size()); + string S (state.header().getList (HDR_ACCEPT_LANGUAGE)); + ESISegment::ListAppend (state.getOutput(), S.c_str(), S.size()); } else { if (state.header().hasListMember (HDR_ACCEPT_LANGUAGE, subref, ',')) { s = "true"; @@ -885,10 +885,9 @@ if (!tempstr[0]) return; - String strVary (rep->header.getList (HDR_VARY)); + string strVary (rep->header.getList (HDR_VARY)); - if (!strVary.size() || strVary.buf()[0] != '*') { + if (!strVary.size() || strVary[0] != '*') { rep->header.putStr (HDR_VARY, tempstr); } } - Index: squid3/src/ESIVarState.h diff -u squid3/src/ESIVarState.h:1.2 squid3/src/ESIVarState.h:1.2.24.1 --- squid3/src/ESIVarState.h:1.2 Mon Aug 4 19:12:48 2003 +++ squid3/src/ESIVarState.h Thu May 3 08:03:34 2007 @@ -64,7 +64,7 @@ class Variable; void addVariable (char const *, size_t, Variable *); - void removeVariable (String const &); + void removeVariable (string const &); void *operator new (size_t byteCount); void operator delete (void *address); Index: squid3/src/ExternalACLEntry.h diff -u squid3/src/ExternalACLEntry.h:1.5 squid3/src/ExternalACLEntry.h:1.5.8.1 --- squid3/src/ExternalACLEntry.h:1.5 Sun Aug 20 18:51:49 2006 +++ squid3/src/ExternalACLEntry.h Tue May 1 09:09:26 2007 @@ -61,11 +61,11 @@ ExternalACLEntryData() : result (-1) {} int result; - String user; - String password; - String message; - String tag; - String log; + string user; + string password; + string message; + string tag; + string log; }; @@ -88,11 +88,11 @@ dlink_node lru; int result; time_t date; - String user; - String password; - String message; - String tag; - String log; + string user; + string password; + string message; + string tag; + string log; external_acl *def; private: Index: squid3/src/HttpHdrCc.cc diff -u squid3/src/HttpHdrCc.cc:1.7 squid3/src/HttpHdrCc.cc:1.6.12.4 --- squid3/src/HttpHdrCc.cc:1.7 Sat Apr 28 15:51:48 2007 +++ squid3/src/HttpHdrCc.cc Thu May 3 03:05:07 2007 @@ -66,7 +66,7 @@ /* local prototypes */ -static int httpHdrCcParseInit(HttpHdrCc * cc, const String * str); +static int httpHdrCcParseInit(HttpHdrCc * cc, const string * str); /* module initialization */ @@ -96,7 +96,7 @@ /* creates an cc object from a 0-terminating string */ HttpHdrCc * -httpHdrCcParseCreate(const String * str) +httpHdrCcParseCreate(const string * str) { HttpHdrCc *cc = httpHdrCcCreate(); @@ -110,7 +110,7 @@ /* parses a 0-terminating string and inits cc */ static int -httpHdrCcParseInit(HttpHdrCc * cc, const String * str) +httpHdrCcParseInit(HttpHdrCc * cc, const string * str) { const char *item; const char *p; /* '=' parameter */ @@ -131,17 +131,16 @@ nlen = ilen; /* find type */ - type = (http_hdr_cc_type ) httpHeaderIdByName(item, nlen, - CcFieldsInfo, CC_ENUM_END); + type = (http_hdr_cc_type ) httpHeaderIdByName(item, nlen, CcFieldsInfo, CC_ENUM_END); if (type < 0) { - debugs(65, 2, "hdr cc: unknown cache-directive: near '" << item << "' in '" << str->buf() << "'"); + debugs(65, 2, "hdr cc: unknown cache-directive: near '" << item << "' in '" << *str << "'"); type = CC_OTHER; } if (EBIT_TEST(cc->mask, type)) { if (type != CC_OTHER) - debugs(65, 2, "hdr cc: ignoring duplicate cache-directive: near '" << item << "' in '" << str->buf() << "'"); + debugs(65, 2, "hdr cc: ignoring duplicate cache-directive: near '" << item << "' in '" << *str << "'"); CcFieldsInfo[type].stat.repCount++; @@ -206,8 +205,8 @@ { assert(cc); - if (cc->other.buf()) - cc->other.clean(); + if (cc->other.c_str()) + cc->other.clear(); memFree(cc, MEM_HTTP_HDR_CC); } @@ -236,7 +235,7 @@ if (EBIT_TEST(cc->mask, flag) && flag != CC_OTHER) { /* print option name */ - packerPrintf(p, (pcount ? ", %s" : "%s"), CcFieldsInfo[flag].name.buf()); + packerPrintf(p, (pcount ? ", %s" : "%s"), CcFieldsInfo[flag].name.c_str()); /* handle options with values */ @@ -254,7 +253,7 @@ } if (cc->other.size()) - packerPrintf(p, (pcount ? ", %s" : "%s"), cc->other.buf()); + packerPrintf(p, (pcount ? ", %s" : "%s"), cc->other.c_str()); } /* negative max_age will clean old max_Age setting */ @@ -300,7 +299,7 @@ extern const HttpHeaderStat *dump_stat; /* argh! */ const int id = (int) val; const int valid_id = id >= 0 && id < CC_ENUM_END; - const char *name = valid_id ? CcFieldsInfo[id].name.buf() : "INVALID"; + const char *name = valid_id ? CcFieldsInfo[id].name.c_str() : "INVALID"; if (count || valid_id) storeAppendPrintf(sentry, "%2d\t %-20s\t %5d\t %6.2f\n", Index: squid3/src/HttpHdrRange.cc diff -u squid3/src/HttpHdrRange.cc:1.15 squid3/src/HttpHdrRange.cc:1.13.8.3 --- squid3/src/HttpHdrRange.cc:1.15 Mon Apr 30 10:51:35 2007 +++ squid3/src/HttpHdrRange.cc Thu May 3 03:05:07 2007 @@ -231,7 +231,7 @@ {} HttpHdrRange * -HttpHdrRange::ParseCreate(const String * range_spec) +HttpHdrRange::ParseCreate(const string * range_spec) { HttpHdrRange *r = new HttpHdrRange; @@ -245,7 +245,7 @@ /* returns true if ranges are valid; inits HttpHdrRange */ bool -HttpHdrRange::parseInit(const String * range_spec) +HttpHdrRange::parseInit(const string * range_spec) { const char *item; const char *pos = NULL; @@ -253,14 +253,14 @@ int count = 0; assert(this && range_spec); ++ParsedCount; - debugs(64, 8, "parsing range field: '" << range_spec->buf() << "'"); + debugs(64, 8, "parsing range field: '" << *range_spec << "'"); /* check range type */ - if (range_spec->caseCmp("bytes=", 6)) + if (strncasecmp(*range_spec,"bytes=", 6)) return 0; /* skip "bytes="; hack! */ - pos = range_spec->buf() + 5; + pos = range_spec->c_str() + 5; /* iterate through comma separated list */ while (strListGetItem(range_spec, ',', &item, &ilen, &pos)) { @@ -276,8 +276,7 @@ ++count; } - debugs(64, 8, "parsed range range count: " << count << ", kept " << - specs.size()); + debugs(64, 8, "parsed range range count: " << count << ", kept " << specs.size()); return specs.count != 0; } Index: squid3/src/HttpHdrSc.cc diff -u squid3/src/HttpHdrSc.cc:1.6 squid3/src/HttpHdrSc.cc:1.5.8.5 --- squid3/src/HttpHdrSc.cc:1.6 Sat Apr 28 15:51:48 2007 +++ squid3/src/HttpHdrSc.cc Mon May 7 03:32:22 2007 @@ -67,7 +67,7 @@ /* local prototypes */ -static int httpHdrScParseInit(HttpHdrSc * sc, const String * str); +static int httpHdrScParseInit(HttpHdrSc * sc, const string * str); /* module initialization */ @@ -94,7 +94,7 @@ /* creates an sc object from a 0-terminating string */ HttpHdrSc * -httpHdrScParseCreate(const String * str) +httpHdrScParseCreate(const string * str) { HttpHdrSc *sc = httpHdrScCreate(); @@ -108,7 +108,7 @@ /* parses a 0-terminating string and inits sc */ static int -httpHdrScParseInit(HttpHdrSc * sc, const String * str) +httpHdrScParseInit(HttpHdrSc * sc, const string * str) { const char *item; const char *p; /* '=' parameter */ @@ -135,11 +135,10 @@ ilen = p++ - item; /* find type */ - type = httpHeaderIdByName(item, ilen, - ScFieldsInfo, SC_ENUM_END); + type = httpHeaderIdByName(item, ilen, ScFieldsInfo, SC_ENUM_END); if (type < 0) { - debugs(90, 2, "hdr sc: unknown control-directive: near '" << item << "' in '" << str->buf() << "'"); + debugs(90, 2, "hdr sc: unknown control-directive: near '" << item << "' in '" << *str << "'"); type = SC_OTHER; } @@ -163,7 +162,7 @@ if (EBIT_TEST(sct->mask, type)) { if (type != SC_OTHER) - debugs(90, 2, "hdr sc: ignoring duplicate control-directive: near '" << item << "' in '" << str->buf() << "'"); + debugs(90, 2, "hdr sc: ignoring duplicate control-directive: near '" << item << "' in '" << *str << "'"); ScFieldsInfo[type].stat.repCount++; @@ -197,7 +196,7 @@ if (!p || !httpHeaderParseQuotedString(p, &sct->content)) { debugs(90, 2, "sc: invalid content= quoted string near '" << item << "'"); - sct->content.clean(); + sct->content.clear(); EBIT_CLR(sct->mask, type); } @@ -258,7 +257,7 @@ if (EBIT_TEST(sc->mask, flag) && flag != SC_OTHER) { /* print option name */ - packerPrintf(p, (pcount ? ", %s" : "%s"), ScFieldsInfo[flag].name.buf()); + packerPrintf(p, (pcount ? ", %s" : "%s"), ScFieldsInfo[flag].name.c_str()); /* handle options with values */ @@ -266,14 +265,14 @@ packerPrintf(p, "=%d", (int) sc->max_age); if (flag == SC_CONTENT) - packerPrintf(p, "=\"%s\"", sc->content.buf()); + packerPrintf(p, "=\"%s\"", sc->content.c_str()); pcount++; } } if (sc->target.size()) - packerPrintf (p, ";%s", sc->target.buf()); + packerPrintf (p, ";%s", sc->target.c_str()); } void @@ -340,7 +339,7 @@ extern const HttpHeaderStat *dump_stat; /* argh! */ const int id = (int) val; const int valid_id = id >= 0 && id < SC_ENUM_END; - const char *name = valid_id ? ScFieldsInfo[id].name.buf() : "INVALID"; + const char *name = valid_id ? ScFieldsInfo[id].name.c_str() : "INVALID"; if (count || valid_id) storeAppendPrintf(sentry, "%2d\t %-20s\t %5d\t %6.2f\n", @@ -353,7 +352,7 @@ extern const HttpHeaderStat *dump_stat; /* argh! */ const int id = (int) val; const int valid_id = id >= 0 && id < SC_ENUM_END; - const char *name = valid_id ? ScFieldsInfo[id].name.buf() : "INVALID"; + const char *name = valid_id ? ScFieldsInfo[id].name.c_str() : "INVALID"; if (count || valid_id) storeAppendPrintf(sentry, "%2d\t %-20s\t %5d\t %6.2f\n", @@ -370,9 +369,9 @@ while (node) { HttpHdrScTarget *sct = (HttpHdrScTarget *)node->data; - if (target && sct->target.buf() && !strcmp (target, sct->target.buf())) + if (target && !sct->target.empty() && !strcmp(target, sct->target) ) return sct; - else if (!target && !sct->target.buf()) + else if (!target && sct->target.empty()) return sct; node = node->next; Index: squid3/src/HttpHdrSc.h diff -u squid3/src/HttpHdrSc.h:1.1 squid3/src/HttpHdrSc.h:1.1.18.1 --- squid3/src/HttpHdrSc.h:1.1 Sun Apr 23 04:27:37 2006 +++ squid3/src/HttpHdrSc.h Tue May 1 09:09:26 2007 @@ -54,7 +54,7 @@ extern void httpHdrScInitModule (void); extern void httpHdrScCleanModule (void); extern HttpHdrSc *httpHdrScCreate(void); -extern HttpHdrSc *httpHdrScParseCreate(String const *); +extern HttpHdrSc *httpHdrScParseCreate(string const *); extern void httpHdrScDestroy(HttpHdrSc * sc); extern HttpHdrSc *httpHdrScDup(const HttpHdrSc * sc); extern void httpHdrScPackInto(const HttpHdrSc * sc, Packer * p); Index: squid3/src/HttpHdrScTarget.cc diff -u squid3/src/HttpHdrScTarget.cc:1.4 squid3/src/HttpHdrScTarget.cc:1.4.8.1 --- squid3/src/HttpHdrScTarget.cc:1.4 Sun Apr 23 04:27:37 2006 +++ squid3/src/HttpHdrScTarget.cc Tue May 1 09:09:26 2007 @@ -58,8 +58,6 @@ httpHdrScTargetDestroy(HttpHdrScTarget * sc) { assert(sc); - sc->target.clean(); - sc->content.clean(); delete sc; } @@ -68,7 +66,7 @@ { HttpHdrScTarget *dup; assert(sc); - dup = httpHdrScTargetCreate(sc->target.buf()); + dup = httpHdrScTargetCreate(sc->target.c_str()); dup->mask = sc->mask; dup->max_age = sc->max_age; dup->content = sc->content; Index: squid3/src/HttpHdrScTarget.h diff -u squid3/src/HttpHdrScTarget.h:1.1 squid3/src/HttpHdrScTarget.h:1.1.18.1 --- squid3/src/HttpHdrScTarget.h:1.1 Sun Apr 23 04:27:37 2006 +++ squid3/src/HttpHdrScTarget.h Tue May 1 09:09:26 2007 @@ -47,8 +47,8 @@ int mask; int max_age; int max_stale; - String content; - String target; + string content; + string target; }; MEMPROXY_CLASS_INLINE(HttpHdrScTarget); Index: squid3/src/HttpHeader.cc diff -u squid3/src/HttpHeader.cc:1.43 squid3/src/HttpHeader.cc:1.40.4.6 --- squid3/src/HttpHeader.cc:1.43 Mon Apr 30 10:51:35 2007 +++ squid3/src/HttpHeader.cc Thu May 3 06:37:05 2007 @@ -256,7 +256,7 @@ #define assert_eid(id) assert((id) >= 0 && (id) < HDR_ENUM_END) -static void httpHeaderNoteParsedEntry(http_hdr_type id, String const &value, int error); +static void httpHeaderNoteParsedEntry(http_hdr_type id, string const &value, int error); static void httpHeaderStatInit(HttpHeaderStat * hs, const char *label); static void httpHeaderStatDump(const HttpHeaderStat * hs, StoreEntry * e); @@ -455,7 +455,7 @@ debugs(55, 7, "Updating header '" << HeadersAttrs[e->id].name << "' in cached entry"); - delByName(e->name.buf()); + delByName(e->name.c_str()); addEntry(e->clone()); } @@ -562,7 +562,7 @@ } if (e->id == HDR_CONTENT_LENGTH && (e2 = findEntry(e->id)) != NULL) { - if (e->value.cmp(e2->value.buf()) != 0) { + if (e->value.compare(e2->value) != 0) { ssize_t l1, l2; debugs(55, Config.onoff.relaxed_header_parser <= 0 ? 1 : 2, "WARNING: found two conflicting content-length headers in {" << getStringPrefix(header_start, header_end) << "}"); @@ -572,12 +572,12 @@ goto reset; } - if (!httpHeaderParseSize(e->value.buf(), &l1)) { - debugs(55, 1, "WARNING: Unparseable content-length '" << e->value.buf() << "'"); + if (!httpHeaderParseSize(e->value.c_str(), &l1)) { + debugs(55, 1, "WARNING: Unparseable content-length '" << e->value << "'"); delete e; continue; - } else if (!httpHeaderParseSize(e2->value.buf(), &l2)) { - debugs(55, 1, "WARNING: Unparseable content-length '" << e2->value.buf() << "'"); + } else if (!httpHeaderParseSize(e2->value.c_str(), &l2)) { + debugs(55, 1, "WARNING: Unparseable content-length '" << e2->value << "'"); delById(e2->id); } else if (l1 > l2) { delById(e2->id); @@ -599,7 +599,7 @@ } } - if (e->id == HDR_OTHER && stringHasWhitespace(e->name.buf())) { + if (e->id == HDR_OTHER && strpbrk(e->name, w_space) != NULL) { debugs(55, Config.onoff.relaxed_header_parser <= 0 ? 1 : 2, "WARNING: found whitespace in HTTP header name {" << getStringPrefix(field_start, field_end) << "}"); @@ -722,7 +722,7 @@ debugs(55, 9, "deleting '" << name << "' fields in hdr " << this); while ((e = getEntry(&pos))) { - if (!e->name.caseCmp(name)) { + if (!strcasecmp(e->name,name)) { delAt(pos); count++; } else @@ -824,7 +824,7 @@ } bool -HttpHeader::getList(http_hdr_type id, String *s) const +HttpHeader::getList(http_hdr_type id, string *s) const { HttpHeaderEntry *e; HttpHeaderPos pos = HttpHeaderInitPos; @@ -837,7 +837,7 @@ while ((e = getEntry(&pos))) { if (e->id == id) - strListAdd(s, e->value.buf(), ','); + strListAdd(s, e->value.c_str(), ','); } /* @@ -855,7 +855,7 @@ } /* return a list of entries with the same id separated by ',' and ws */ -String +string HttpHeader::getList(http_hdr_type id) const { HttpHeaderEntry *e; @@ -865,13 +865,13 @@ assert(CBIT_TEST(ListHeadersMask, id)); if (!CBIT_TEST(mask, id)) - return String(); + return ""; - String s; + string s; while ((e = getEntry(&pos))) { if (e->id == id) - strListAdd(&s, e->value.buf(), ','); + strListAdd(&s, e->value.c_str(), ','); } /* @@ -889,7 +889,7 @@ } /* return a string or list of entries with the same id separated by ',' and ws */ -String +string HttpHeader::getStrOrList(http_hdr_type id) const { HttpHeaderEntry *e; @@ -900,13 +900,13 @@ if ((e = findEntry(id))) return e->value; - return String(); + return ""; } /* * Returns the value of the specified header. */ -String +string HttpHeader::getByName(const char *name) const { http_hdr_type id; @@ -921,12 +921,12 @@ if (id != -1) return getStrOrList(id); - String result; + string result; /* Sorry, an unknown header name. Do linear search */ while ((e = getEntry(&pos))) { - if (e->id == HDR_OTHER && e->name.caseCmp(name) == 0) { - strListAdd(&result, e->value.buf(), ','); + if (e->id == HDR_OTHER && strcasecmp(e->name,name) == 0) { + strListAdd(&result, e->value.c_str(), ','); } } @@ -936,10 +936,10 @@ /* * Returns a the value of the specified list member, if any. */ -String +string HttpHeader::getByNameListMember(const char *name, const char *member, const char separator) const { - String header; + string header; const char *pos = NULL; const char *item; int ilen; @@ -949,7 +949,7 @@ header = getByName(name); - String result; + string result; while (strListGetItem(&header, separator, &item, &ilen, &pos)) { if (strncmp(item, member, mlen) == 0 && item[mlen] == '=') { @@ -964,10 +964,10 @@ /* * returns a the value of the specified list member, if any. */ -String +string HttpHeader::getListMember(http_hdr_type id, const char *member, const char separator) const { - String header; + string header; const char *pos = NULL; const char *item; int ilen; @@ -976,7 +976,7 @@ assert(id >= 0); header = getStrOrList(id); - String result; + string result; while (strListGetItem(&header, separator, &item, &ilen, &pos)) { if (strncmp(item, member, mlen) == 0 && item[mlen] == '=') { @@ -985,7 +985,6 @@ } } - header.clean(); return result; } @@ -1149,7 +1148,7 @@ assert(Headers[id].type == ftDate_1123); /* must be of an appropriate type */ if ((e = findEntry(id))) { - value = parse_rfc1123(e->value.buf()); + value = parse_rfc1123(e->value.c_str()); httpHeaderNoteParsedEntry(e->id, e->value, value < 0); } @@ -1166,7 +1165,7 @@ if ((e = findEntry(id))) { httpHeaderNoteParsedEntry(e->id, e->value, 0); /* no errors are possible */ - return e->value.buf(); + return e->value.c_str(); } return NULL; @@ -1182,7 +1181,7 @@ if ((e = findLastEntry(id))) { httpHeaderNoteParsedEntry(e->id, e->value, 0); /* no errors are possible */ - return e->value.buf(); + return e->value.c_str(); } return NULL; @@ -1192,7 +1191,7 @@ HttpHeader::getCc() const { HttpHdrCc *cc; - String s; + string s; if (!CBIT_TEST(mask, HDR_CACHE_CONTROL)) return NULL; @@ -1239,7 +1238,7 @@ if (!CBIT_TEST(mask, HDR_SURROGATE_CONTROL)) return NULL; - String s; + string s; (void) getList(HDR_SURROGATE_CONTROL, &s); @@ -1262,7 +1261,7 @@ HttpHeaderEntry *e; if ((e = findEntry(HDR_CONTENT_RANGE))) { - cr = httpHdrContRangeParseCreate(e->value.buf()); + cr = httpHdrContRangeParseCreate(e->value.c_str()); httpHeaderNoteParsedEntry(e->id, e->value, !cr); } @@ -1308,7 +1307,7 @@ assert(Headers[id].type == ftETag); /* must be of an appropriate type */ if ((e = findEntry(id))) - etagParseInit(&etag, e->value.buf()); + etagParseInit(&etag, e->value.c_str()); return etag; } @@ -1322,7 +1321,7 @@ memset(&tot, 0, sizeof(tot)); if ((e = findEntry(id))) { - const char *str = e->value.buf(); + const char *str = e->value.c_str(); /* try as an ETag */ if (etagParseInit(&tot.tag, str)) { @@ -1358,19 +1357,13 @@ Headers[id].stat.aliveCount++; - debugs(55, 9, "created HttpHeaderEntry " << this << ": '" << name.buf() << " : " << value.buf()); + debugs(55, 9, "created HttpHeaderEntry " << this << ": '" << name << " : " << value); } HttpHeaderEntry::~HttpHeaderEntry() { assert_eid(id); - debugs(55, 9, "destroying entry " << this << ": '" << name.buf() << ": " << value.buf() << "'"); - /* clean name if needed */ - - if (id == HDR_OTHER) - name.clean(); - - value.clean(); + debugs(55, 9, "destroying entry " << this << ": '" << name << ": " << value << "'"); assert(Headers[id].stat.aliveCount); @@ -1420,9 +1413,9 @@ /* is it a "known" field? */ http_hdr_type id = httpHeaderIdByName(field_start, name_len, Headers, HDR_ENUM_END); - String name; + string name; - String value; + string value; if (id < 0) id = HDR_OTHER; @@ -1444,10 +1437,10 @@ if (field_end - value_start > 65534) { /* String must be LESS THAN 64K and it adds a terminating NULL */ - debugs(55, 1, "WARNING: ignoring '" << name.buf() << "' header of " << (field_end - value_start) << " bytes"); + debugs(55, 1, "WARNING: ignoring '" << name << "' header of " << (field_end - value_start) << " bytes"); if (id == HDR_OTHER) - name.clean(); + name.clear(); return NULL; } @@ -1459,24 +1452,24 @@ Headers[id].stat.aliveCount++; - debugs(55, 9, "parsed HttpHeaderEntry: '" << name.buf() << ": " << value.buf() << "'"); + debugs(55, 9, "parsed HttpHeaderEntry: '" << name << ": " << value << "'"); - return new HttpHeaderEntry(id, name.buf(), value.buf()); + return new HttpHeaderEntry(id, name.c_str(), value.c_str()); } HttpHeaderEntry * HttpHeaderEntry::clone() const { - return new HttpHeaderEntry(id, name.buf(), value.buf()); + return new HttpHeaderEntry(id, name.c_str(), value.c_str()); } void HttpHeaderEntry::packInto(Packer * p) const { assert(p); - packerAppend(p, name.buf(), name.size()); + packerAppend(p, name.c_str(), name.size()); packerAppend(p, ": ", 2); - packerAppend(p, value.buf(), value.size()); + packerAppend(p, value.c_str(), value.size()); packerAppend(p, "\r\n", 2); } @@ -1486,7 +1479,7 @@ assert_eid (id); assert (Headers[id].type == ftInt); int val = -1; - int ok = httpHeaderParseInt(value.buf(), &val); + int ok = httpHeaderParseInt(value.c_str(), &val); httpHeaderNoteParsedEntry(id, value, !ok); /* XXX: Should we check ok - ie * return ok ? -1 : value; @@ -1495,13 +1488,13 @@ } static void -httpHeaderNoteParsedEntry(http_hdr_type id, String const &context, int error) +httpHeaderNoteParsedEntry(http_hdr_type id, string const &context, int error) { Headers[id].stat.parsCount++; if (error) { Headers[id].stat.errCount++; - debugs(55, 2, "cannot parse hdr field: '" << Headers[id].name.buf() << ": " << context.buf() << "'"); + debugs(55, 2, "cannot parse hdr field: '" << Headers[id].name << ": " << context << "'"); } } @@ -1518,7 +1511,7 @@ { const int id = (int) val; const int valid_id = id >= 0 && id < HDR_ENUM_END; - const char *name = valid_id ? Headers[id].name.buf() : "INVALID"; + const char *name = valid_id ? Headers[id].name.c_str() : "INVALID"; int visible = count > 0; /* for entries with zero count, list only those that belong to current type of message */ @@ -1596,7 +1589,7 @@ for (ht = (http_hdr_type)0; ht < HDR_ENUM_END; ++ht) { HttpHeaderFieldInfo *f = Headers + ht; storeAppendPrintf(e, "%2d\t %-20s\t %5d\t %6.3f\t %6.3f\n", - f->id, f->name.buf(), f->stat.aliveCount, + f->id, f->name.c_str(), f->stat.aliveCount, xpercent(f->stat.errCount, f->stat.parsCount), xpercent(f->stat.repCount, f->stat.seenCount)); } @@ -1609,15 +1602,15 @@ } http_hdr_type -httpHeaderIdByName(const char *name, int name_len, const HttpHeaderFieldInfo * info, int end) +httpHeaderIdByName(const char *name, unsigned int name_len, const HttpHeaderFieldInfo * info, int end) { int i; for (i = 0; i < end; ++i) { - if (name_len >= 0 && name_len != info[i].name.size()) + if (name_len >= 0 && name_len != (unsigned int)info[i].name.size()) continue; - if (!strncasecmp(name, info[i].name.buf(), + if (!strncasecmp(name, info[i].name, name_len < 0 ? info[i].name.size() + 1 : name_len)) return info[i].id; } @@ -1642,7 +1635,7 @@ assert(id >= 0 && id < HDR_ENUM_END); - return Headers[id].name.buf(); + return Headers[id].name.c_str(); } int @@ -1656,7 +1649,7 @@ assert(id >= 0); - String header (getStrOrList(id)); + string header (getStrOrList(id)); while (strListGetItem(&header, separator, &item, &ilen, &pos)) { if (strncmp(item, member, mlen) == 0 @@ -1680,7 +1673,7 @@ assert(name); - String header (getByName(name)); + string header (getByName(name)); while (strListGetItem(&header, separator, &item, &ilen, &pos)) { if (strncmp(item, member, mlen) == 0 @@ -1698,9 +1691,9 @@ { if (has(HDR_CONNECTION)) { /* anything that matches Connection list member will be deleted */ - String strConnection; - - (void) getList(HDR_CONNECTION, &strConnection); + string strConnection; + + (void) getList(HDR_CONNECTION, &strConnection); const HttpHeaderEntry *e; HttpHeaderPos pos = HttpHeaderInitPos; /* @@ -1713,7 +1706,7 @@ */ while ((e = getEntry(&pos))) { - if (strListIsMember(&strConnection, e->name.buf(), ',')) + if (strListIsMember(&strConnection, e->name.c_str(), ',')) delAt(pos); } Index: squid3/src/HttpHeader.h diff -u squid3/src/HttpHeader.h:1.18 squid3/src/HttpHeader.h:1.18.4.3 --- squid3/src/HttpHeader.h:1.18 Mon Oct 2 03:52:36 2006 +++ squid3/src/HttpHeader.h Thu May 3 03:05:11 2007 @@ -183,8 +183,8 @@ int getInt() const; MEMPROXY_CLASS(HttpHeaderEntry); http_hdr_type id; - String name; - String value; + string name; + string value; }; MEMPROXY_CLASS_INLINE(HttpHeaderEntry) @@ -210,12 +210,12 @@ void delAt(HttpHeaderPos pos); void addEntry(HttpHeaderEntry * e); void insertEntry(HttpHeaderEntry * e); - String getList(http_hdr_type id) const; - bool getList(http_hdr_type id, String *s) const; - String getStrOrList(http_hdr_type id) const; - String getByName(const char *name) const; - String getByNameListMember(const char *name, const char *member, const char separator) const; - String getListMember(http_hdr_type id, const char *member, const char separator) const; + string getList(http_hdr_type id) const; + bool getList(http_hdr_type id, string *s) const; + string getStrOrList(http_hdr_type id) const; + string getByName(const char *name) const; + string getByNameListMember(const char *name, const char *member, const char separator) const; + string getListMember(http_hdr_type id, const char *member, const char separator) const; int has(http_hdr_type id) const; void putInt(http_hdr_type id, int number); void putTime(http_hdr_type id, time_t htime); @@ -257,7 +257,7 @@ extern void httpHeaderRegisterWithCacheManager(CacheManager & manager); -extern int httpHeaderParseQuotedString (const char *start, String *val); +extern int httpHeaderParseQuotedString (const char *start, string *val); SQUIDCEXTERN int httpHeaderHasByNameListMember(const HttpHeader * hdr, const char *name, const char *member, const char separator); SQUIDCEXTERN void httpHeaderUpdate(HttpHeader * old, const HttpHeader * fresh, const HttpHeaderMask * denied_mask); int httpMsgIsPersistent(HttpVersion const &http_ver, const HttpHeader * hdr); Index: squid3/src/HttpHeaderRange.h diff -u squid3/src/HttpHeaderRange.h:1.9 squid3/src/HttpHeaderRange.h:1.9.8.3 --- squid3/src/HttpHeaderRange.h:1.9 Tue Jun 6 12:50:39 2006 +++ squid3/src/HttpHeaderRange.h Thu May 3 03:05:11 2007 @@ -78,7 +78,7 @@ static size_t ParsedCount; /* Http Range Header Field */ - static HttpHdrRange *ParseCreate(const String * range_spec); + static HttpHdrRange *ParseCreate(const string * range_spec); HttpHdrRange(); HttpHdrRange(HttpHdrRange const &); @@ -96,7 +96,7 @@ int canonize(size_t); int canonize(HttpReply *rep); /* returns true if ranges are valid; inits HttpHdrRange */ - bool parseInit(const String * range_spec); + bool parseInit(const string * range_spec); void packInto(Packer * p) const; /* other */ bool isComplex() const; @@ -127,7 +127,7 @@ ssize_t debt() const; void debt(ssize_t); ssize_t debt_size; /* bytes left to send from the current spec */ - String boundary; /* boundary for multipart responses */ + string boundary; /* boundary for multipart responses */ bool valid; }; Index: squid3/src/HttpHeaderTools.cc diff -u squid3/src/HttpHeaderTools.cc:1.23 squid3/src/HttpHeaderTools.cc:1.21.4.4 --- squid3/src/HttpHeaderTools.cc:1.23 Sat Apr 28 15:51:48 2007 +++ squid3/src/HttpHeaderTools.cc Thu May 3 03:05:11 2007 @@ -75,7 +75,7 @@ int i; for (i = 0; i < count; ++i) - table[i].name.clean(); + table[i].name.clear(); delete [] table; } @@ -161,7 +161,7 @@ int httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive) { - String list; + string list; http_hdr_type ht; int res; /* what type of header do we have? */ @@ -177,14 +177,12 @@ res = strListIsMember(&list, directive, ','); - list.clean(); - return res; } /* returns true iff "m" is a member of the list */ int -strListIsMember(const String * list, const char *m, char del) +strListIsMember(const string * list, const char *m, char del) { const char *pos = NULL; const char *item; @@ -203,7 +201,7 @@ /* returns true iff "s" is a substring of a member of the list */ int -strListIsSubstr(const String * list, const char *s, char del) +strListIsSubstr(const string * list, const char *s, char del) { assert(list && del); return list->pos(s) != 0; @@ -219,7 +217,7 @@ /* appends an item to the list */ void -strListAdd(String * str, const char *item, char del) +strListAdd(string * str, const char *item, char del) { assert(str && item); @@ -243,7 +241,7 @@ * init pos with NULL to start iteration. */ int -strListGetItem(const String * str, char del, const char **item, int *ilen, const char **pos) +strListGetItem(const string * str, char del, const char **item, int *ilen, const char **pos) { size_t len; static char delim[2][3] = { @@ -260,7 +258,7 @@ else (*pos)++; } else { - *pos = str->buf(); + *pos = str->c_str(); if (!*pos) return 0; @@ -349,10 +347,10 @@ * RC TODO: This is too looose. We should honour the BNF and exclude CTL's */ int -httpHeaderParseQuotedString (const char *start, String *val) +httpHeaderParseQuotedString (const char *start, string *val) { const char *end, *pos; - val->clean(); + val->clear(); assert (*start == '"'); pos = start + 1; Index: squid3/src/HttpReply.cc diff -u squid3/src/HttpReply.cc:1.39 squid3/src/HttpReply.cc:1.38.4.5 --- squid3/src/HttpReply.cc:1.39 Fri Apr 20 00:58:35 2007 +++ squid3/src/HttpReply.cc Mon May 7 03:32:22 2007 @@ -105,7 +105,7 @@ // virtual function instead, but it is not clear whether virtual methods // are allowed with MEMPROXY_CLASS() and whether some cbdata void* // conversions are not going to kill virtual tables - const String pfx = protoPrefix; + const string pfx = protoPrefix; clean(); init(); protoPrefix = pfx; @@ -220,7 +220,7 @@ hdr->putStr(HDR_CONTENT_TYPE, ctype); content_type = ctype; } else - content_type = String(); + content_type.clear(); if (clen >= 0) hdr->putInt(HDR_CONTENT_LENGTH, clen); @@ -262,7 +262,7 @@ int HttpReply::validatorsMatch(HttpReply const * otherRep) const { - String one,two; + string one,two; assert (otherRep); /* Numbers first - easiest to check */ /* Content-Length */ @@ -278,9 +278,7 @@ two = otherRep->header.getStrOrList(HDR_ETAG); - if (!one.buf() || !two.buf() || strcasecmp (one.buf(), two.buf())) { - one.clean(); - two.clean(); + if (one.empty() || two.empty() || strcasecmp (one, two)) { return 0; } @@ -292,9 +290,9 @@ two = otherRep->header.getStrOrList(HDR_CONTENT_MD5); - if (!one.buf() || !two.buf() || strcasecmp (one.buf(), two.buf())) { - one.clean(); - two.clean(); + if (one.empty() || two.empty() || strcasecmp (one, two)) { + one.clear(); + two.clear(); return 0; } @@ -383,7 +381,7 @@ if (str) content_type.limitInit(str, strcspn(str, ";\t ")); else - content_type = String(); + content_type = ""; /* be sure to set expires after date and cache-control */ expires = hdrExpirationTime(); @@ -393,7 +391,7 @@ void HttpReply::hdrCacheClean() { - content_type.clean(); + content_type.clear(); if (cache_control) { httpHdrCcDestroy(cache_control); @@ -435,8 +433,8 @@ bool HttpReply::sanityCheckStartLine(MemBuf *buf, http_status *error) { - if (buf->contentSize() >= protoPrefix.size() && protoPrefix.cmp(buf->content(), protoPrefix.size()) != 0) { - debugs(58, 3, "HttpReply::sanityCheckStartLine: missing protocol prefix (" << protoPrefix.buf() << ") in '" << buf->content() << "'"); + if (buf->contentSize() >= protoPrefix.size() && strncmp(protoPrefix, buf->content(), protoPrefix.size()) != 0) { + debugs(58, 3, "HttpReply::sanityCheckStartLine: missing protocol prefix (" << protoPrefix << ") in '" << buf->content() << "'"); *error = HTTP_INVALID_HEADER; return false; } Index: squid3/src/HttpReply.h diff -u squid3/src/HttpReply.h:1.18 squid3/src/HttpReply.h:1.18.8.1 --- squid3/src/HttpReply.h:1.18 Sun Apr 23 04:27:37 2006 +++ squid3/src/HttpReply.h Tue May 1 09:09:26 2007 @@ -77,7 +77,7 @@ time_t expires; - String content_type; + string content_type; HttpHdrSc *surrogate_control; @@ -90,7 +90,7 @@ HttpBody body; /* for small constant memory-resident text bodies only */ - String protoPrefix; // e.g., "HTTP/" + string protoPrefix; // e.g., "HTTP/" bool do_clean; Index: squid3/src/HttpRequest.cc diff -u squid3/src/HttpRequest.cc:1.39 squid3/src/HttpRequest.cc:1.37.4.3 --- squid3/src/HttpRequest.cc:1.39 Sat Apr 28 15:51:48 2007 +++ squid3/src/HttpRequest.cc Tue May 1 17:09:50 2007 @@ -70,7 +70,7 @@ { method = METHOD_NONE; protocol = PROTO_NONE; - urlpath = NULL; + urlpath.clear(); login[0] = '\0'; host[0] = '\0'; auth_user_request = NULL; @@ -115,7 +115,7 @@ safe_free(vary_headers); - urlpath.clean(); + urlpath.clear(); header.clean(); @@ -129,13 +129,13 @@ range = NULL; } - tag.clean(); + tag.clear(); - extacl_user.clean(); + extacl_user.clear(); - extacl_passwd.clean(); + extacl_passwd.clear(); - extacl_log.clean(); + extacl_log.clear(); } void @@ -243,7 +243,7 @@ assert(p); /* pack request-line */ packerPrintf(p, "%s %s HTTP/1.0\r\n", - RequestMethodStr[method], urlpath.buf()); + RequestMethodStr[method], urlpath.c_str()); /* headers */ header.packInto(p); /* trailer */ @@ -275,12 +275,12 @@ * check anonymizer (aka header_access) configuration. */ int -httpRequestHdrAllowed(const HttpHeaderEntry * e, String * strConn) +httpRequestHdrAllowed(const HttpHeaderEntry * e, string * strConn) { assert(e); /* check connection header */ - if (strConn && strListIsMember(strConn, e->name.buf(), ',')) + if (strConn && strListIsMember(strConn, e->name.c_str(), ',')) return 0; return 1; @@ -354,7 +354,7 @@ return urlCanonical((HttpRequest*)this); if (urlpath.size()) - return urlpath.buf(); + return urlpath.c_str(); return "/"; } Index: squid3/src/HttpRequest.h diff -u squid3/src/HttpRequest.h:1.26 squid3/src/HttpRequest.h:1.25.4.3 --- squid3/src/HttpRequest.h:1.26 Mon Apr 16 11:04:49 2007 +++ squid3/src/HttpRequest.h Thu May 3 03:05:11 2007 @@ -40,7 +40,7 @@ #include "HttpRequestMethod.h" /* Http Request */ -extern int httpRequestHdrAllowed(const HttpHeaderEntry * e, String * strConnection); +extern int httpRequestHdrAllowed(const HttpHeaderEntry * e, string * strConnection); extern int httpRequestHdrAllowedByName(http_hdr_type id); extern void httpRequestPack(void *obj, Packer *p); @@ -84,7 +84,7 @@ u_short port; - String urlpath; + string urlpath; char *canonical; @@ -120,13 +120,13 @@ char *peer_domain; /* Configured peer forceddomain */ - String tag; /* Internal tag for this request */ + string tag; /* Internal tag for this request */ - String extacl_user; /* User name returned by extacl lookup */ + string extacl_user; /* User name returned by extacl lookup */ - String extacl_passwd; /* Password returned by extacl lookup */ + string extacl_passwd; /* Password returned by extacl lookup */ - String extacl_log; /* String to be used for access.log purposes */ + string extacl_log; /* String to be used for access.log purposes */ public: bool multipartRangeRequest() const; Index: squid3/src/HttpStatusLine.cc diff -u squid3/src/HttpStatusLine.cc:1.7 squid3/src/HttpStatusLine.cc:1.5.12.4 --- squid3/src/HttpStatusLine.cc:1.7 Fri May 4 15:51:11 2007 +++ squid3/src/HttpStatusLine.cc Sat May 5 07:37:31 2007 @@ -82,7 +82,7 @@ * so NULL-termination assumed. */ int -httpStatusLineParse(HttpStatusLine * sline, const String &protoPrefix, const char *start, const char *end) +httpStatusLineParse(HttpStatusLine * sline, const string &protoPrefix, const char *start, const char *end) { assert(sline); sline->status = HTTP_INVALID_HEADER; /* Squid header parsing error */ @@ -90,7 +90,7 @@ // XXX: HttpMsg::parse() has a similar check but is using // casesensitive comparison (which is required by HTTP errata?) - if (protoPrefix.caseCmp(start, protoPrefix.size()) != 0) + if (strncasecmp(protoPrefix,start, protoPrefix.size()) != 0) return 0; start += protoPrefix.size(); Index: squid3/src/HttpStatusLine.h diff -u squid3/src/HttpStatusLine.h:1.2 squid3/src/HttpStatusLine.h:1.2.12.1 --- squid3/src/HttpStatusLine.h:1.2 Mon Sep 12 19:12:43 2005 +++ squid3/src/HttpStatusLine.h Tue May 1 09:09:26 2007 @@ -56,7 +56,7 @@ SQUIDCEXTERN const char *httpStatusLineReason(const HttpStatusLine * sline); /* parse/pack */ /* parse a 0-terminating buffer and fill internal structires; returns true on success */ -SQUIDCEXTERN int httpStatusLineParse(HttpStatusLine * sline, const String &protoPrefix, +SQUIDCEXTERN int httpStatusLineParse(HttpStatusLine * sline, const string &protoPrefix, const char *start, const char *end); /* pack fields using Packer */ SQUIDCEXTERN void httpStatusLinePackInto(const HttpStatusLine * sline, Packer * p); Index: squid3/src/Makefile.am diff -u squid3/src/Makefile.am:1.118 squid3/src/Makefile.am:1.116.2.5 --- squid3/src/Makefile.am:1.118 Tue Apr 24 09:54:46 2007 +++ squid3/src/Makefile.am Sat May 5 20:18:15 2007 @@ -556,7 +556,7 @@ $(SSL_SOURCE) \ stat.cc \ StatHist.cc \ - String.cc \ + SqString.cc \ stmem.cc \ stmem.h \ store.cc \ @@ -626,7 +626,8 @@ MemBuf.h \ Store.cci \ StoreEntryStream.h \ - String.cci \ + SqString.cci \ + SqString.h \ SquidString.h \ SquidTime.h @@ -727,7 +728,7 @@ StoreMetaUnpacker.cc \ StoreMetaURL.cc \ StoreMetaVary.cc \ - String.cc \ + SqString.cc \ time.cc \ ufsdump.cc \ url.cc \ @@ -1089,6 +1090,7 @@ globals.cc check_PROGRAMS+= \ + tests/testString \ tests/testAuth \ tests/testACLMaxUserIP \ tests/testBoilerplate \ @@ -1100,7 +1102,6 @@ tests/test_http_range \ tests/testHttpRequest \ tests/testStore \ - tests/testString \ tests/testURL \ @STORE_TESTS@ @@ -1108,7 +1109,7 @@ authenticate.cc \ ConfigParser.cc \ tests/stub_acl.cc tests/stub_cache_cf.cc \ - tests/stub_helper.cc cbdata.cc String.cc \ + tests/stub_helper.cc cbdata.cc SqString.cc \ tests/stub_store.cc HttpHeaderTools.cc HttpHeader.cc acl.cc event.cc mem.cc \ MemBuf.cc HttpHdrContRange.cc Packer.cc ACLChecklist.cc HttpHdrCc.cc HttpHdrSc.cc \ HttpHdrScTarget.cc url.cc ACLProxyAuth.cc ACLRegexData.cc ACLUserData.cc \ @@ -1126,7 +1127,7 @@ URLScheme.cc \ wordlist.cc ## acl.cc cache_cf.cc tools.cc \ -## helper.cc String.cc cbdata.cc HttpHeaderTools.cc store.cc cache_manager.cc \ +## helper.cc SqString.cc cbdata.cc HttpHeaderTools.cc store.cc cache_manager.cc \ ## HttpHeader.cc url.cc mem.cc HttpRequest.cc Packer.cc access_log.cc \ ## MemBuf.cc StatHist.cc logfile.cc @@ -1162,7 +1163,7 @@ ## HttpHdrScTarget.cc \ ## Packer.cc \ ## StatHist.cc \ -## String.cc \ +## SqString.cc \ tests_testACLMaxUserIP_SOURCES= \ acl.cc \ ACLChecklist.cc \ @@ -1187,7 +1188,7 @@ Parsing.cc \ StatHist.cc \ stmem.cc \ - String.cc \ + SqString.cc \ tests/stub_cache_cf.cc \ tests/stub_comm.cc \ tests/stub_DelayId.cc \ @@ -1235,7 +1236,7 @@ HttpRequest.cc \ HttpRequestMethod.cc \ mem.cc \ - String.cc \ + SqString.cc \ tests/testCacheManager.cc \ tests/testCacheManager.h \ tests/testMain.cc \ @@ -1399,7 +1400,7 @@ HttpRequestMethod.cc \ mem.cc \ RemovalPolicy.cc \ - String.cc \ + SqString.cc \ tests/CapturingStoreEntry.h \ tests/testEvent.cc \ tests/testEvent.h \ @@ -1551,7 +1552,7 @@ HttpRequestMethod.cc \ mem.cc \ RemovalPolicy.cc \ - String.cc \ + SqString.cc \ tests/testEventLoop.cc \ tests/testEventLoop.h \ tests/testMain.cc \ @@ -1839,7 +1840,7 @@ StoreMetaURL.cc \ StoreMetaVary.cc \ StoreSwapLogData.cc \ - String.cc \ + SqString.cc \ SwapDir.cc \ time.cc \ tools.cc \ @@ -1881,7 +1882,7 @@ HttpRequest.cc \ HttpRequestMethod.cc \ mem.cc \ - String.cc \ + SqString.cc \ tests/testHttpRequest.h \ tests/testHttpRequest.cc \ tests/testHttpRequestMethod.h \ @@ -2048,7 +2049,7 @@ SwapDir.cc \ authenticate.cc \ tests/stub_acl.cc tests/stub_cache_cf.cc \ - tests/stub_helper.cc cbdata.cc String.cc \ + tests/stub_helper.cc cbdata.cc SqString.cc \ tests/stub_comm.cc \ tests/stub_client_side_request.cc \ tests/stub_http.cc \ @@ -2101,11 +2102,10 @@ tests_testStore_LDFLAGS = $(LIBADD_DL) tests_testStore_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a \ @SQUID_CPPUNIT_LA@ - # string needs mem.cc. tests_testString_SOURCES= \ mem.cc \ - String.cc \ + SqString.cc \ tests/testMain.cc \ tests/testString.cc \ tests/testString.h \ @@ -2217,7 +2217,7 @@ HttpRequestMethod.cc \ mem.cc \ RemovalPolicy.cc \ - String.cc \ + SqString.cc \ tests/testURL.cc \ tests/testURL.h \ tests/testURLScheme.cc \ Index: squid3/src/MemObject.cc diff -u squid3/src/MemObject.cc:1.24 squid3/src/MemObject.cc:1.22.4.2 --- squid3/src/MemObject.cc:1.24 Mon Apr 30 10:51:35 2007 +++ squid3/src/MemObject.cc Tue May 1 17:09:50 2007 @@ -168,7 +168,7 @@ debugs(20, 1, "MemObject->nclients: " << nclients); debugs(20, 1, "MemObject->reply: " << _reply); debugs(20, 1, "MemObject->request: " << request); - debugs(20, 1, "MemObject->log_url: " << log_url << " " << checkNullString(log_url)); + debugs(20, 1, "MemObject->log_url: " << (log_url ? log_url : "(NULL)") ); } HttpReply const * Index: squid3/src/PeerDigest.h diff -u squid3/src/PeerDigest.h:1.1 squid3/src/PeerDigest.h:1.1.16.1 --- squid3/src/PeerDigest.h:1.1 Sun Aug 20 18:51:49 2006 +++ squid3/src/PeerDigest.h Thu May 3 08:03:34 2007 @@ -97,7 +97,7 @@ struct _peer *peer; /* pointer back to peer structure, argh */ CacheDigest *cd; /* actual digest structure */ - String host; /* copy of peer->host */ + string host; /* copy of peer->host */ const char *req_result; /* text status of the last request */ struct Index: squid3/src/SqString.cc diff -u /dev/null squid3/src/SqString.cc:1.1.2.4 --- /dev/null Thu Jan 1 01:00:00 1970 +++ squid3/src/SqString.cc Mon May 7 05:01:04 2007 @@ -0,0 +1,391 @@ + +/* + * $Id$ + * + * DEBUG: section 67 String + * AUTHOR: Duane Wessels + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ + +#include "squid.h" +#include "SqString.h" +#include "Store.h" + +void +SqString::initBuf(size_t sz) +{ + PROF_start(StringInitBuf); + clear(); + buf_ = (char *)memAllocString(sz, &sz); + assert(sz < 65536); + size_ = sz; + PROF_stop(StringInitBuf); +} + +void +SqString::limitInit(const char *str, int len) +{ + PROF_start(StringLimitInit); + assert(this && str); + initBuf(len + 1); + len_ = len; + xmemcpy(buf_, str, len); + buf_[len] = '\0'; + PROF_stop(StringLimitInit); +} + +void +SqString::init(char const *str) +{ + assert(this); + + PROF_start(StringInit); + + if (str) + limitInit(str, strlen(str)); + else + clear(); + PROF_stop(StringInit); +} + +void +SqString::clear() +{ + PROF_start(StringClean); + assert(this); + + if (buf_) + memFreeString(size_, buf_); + + len_ = 0; + size_ = 0; + buf_ = NULL; + PROF_stop(StringClean); +} + +SqString::~SqString() +{ + clear(); +#if DEBUGSTRINGS + + SqStringRegistry::Instance().remove(this); +#endif +} + +SqString::SqString (char const *aString) +{ + memset(this, 0, sizeof(SqString)); + + init(aString); +#if DEBUGSTRINGS + + SqStringRegistry::Instance().add(this); +#endif +} + +SqString & +SqString::operator =(char const *aString) +{ + assert(this); + init(aString); + return *this; +} + +SqString & +SqString::operator = (SqString const &old) +{ + if (old.size()) + limitInit(old.c_str(), old.size()); + else + clear(); + + return *this; +} + +bool +SqString::operator == (SqString const &that) const +{ + return (this->compare(that) == 0); +} + +bool +SqString::operator != (SqString const &that) const +{ + return (this->compare(that) != 0); +} + +bool +SqString::operator >= (SqString const &that) const +{ + return (this->compare(that) >= 0); +} + +bool +SqString::operator <= (SqString const &that) const +{ + return (this->compare(that) <= 0); +} + +bool +SqString::operator > (SqString const &that) const +{ + return (this->compare(that) > 0); +} + +bool +SqString::operator < (SqString const &that) const +{ + return (this->compare(that) < 0); +} + +SqString::SqString (SqString const &old) +{ + memset(this, 0, sizeof(SqString)); + + init (old.c_str()); +#if DEBUGSTRINGS + + SqStringRegistry::Instance().add(this); +#endif +} + +void +SqString::append(const char *str, int len) +{ + assert(this); + + PROF_start(StringAppend); + + if(len < 1 || str == NULL) + return; + + if (len_ + len < size_) { + strncat(buf_, str, len); + len_ += len; + } else { + unsigned int ssz = len_ + len; + unsigned int bsz = len_ + len + 1; + char* tmp = (char *)memAllocString(ssz, &bsz); + assert(bsz < 65536); + + if (buf_) + xmemcpy(tmp, buf_, len_); + + if (len) + xmemcpy(tmp + len_, str, len); + + tmp[ssz + 1] = '\0'; + + clear(); + + size_ = bsz; + len_ = ssz; + buf_ = tmp; + tmp = NULL; + } + PROF_stop(StringAppend); +} + +void +SqString::append(char const *str) +{ + assert (str); + append (str, strlen(str)); +} + +void +SqString::append (char chr) +{ + char myString[2]; + myString[0]=chr; + myString[1]='\0'; + append (myString, 1); +} + +void +SqString::append(SqString const &old) +{ + append (old.c_str(), old.len_); +} + +char& +SqString::operator [](unsigned int pos) +{ + assert(pos < size_ ); + + return buf_[pos]; +} + +#if DEBUGSTRINGS +void +SqString::stat(StoreEntry *entry) const +{ + storeAppendPrintf(entry, "%p : %d/%d \"%s\"\n",this,len_, size_, c_str()); +} + +SqStringRegistry & +SqStringRegistry::Instance() +{ + return Instance_; +} + +template +int +ptrcmp(C const &lhs, C const &rhs) +{ + return lhs - rhs; +} + +void +SqStringRegistry::registerWithCacheManager(CacheManager & manager) +{ + manager.registerAction("strings", + "Strings in use in squid", Stat, 0, 1); +} + +void +SqStringRegistry::add(SqString const *entry) +{ + entries.insert(entry, ptrcmp); +} + +void +SqStringRegistry::remove(SqString const *entry) +{ + entries.remove(entry, ptrcmp); +} + +SqStringRegistry SqStringRegistry::Instance_; + +extern size_t memStringCount(); + +void +SqStringRegistry::Stat(StoreEntry *entry) +{ + storeAppendPrintf(entry, "%lu entries, %lu reported from MemPool\n", (unsigned long) Instance().entries.elements, (unsigned long) memStringCount()); + Instance().entries.head->walk(Stater, entry); +} + +void +SqStringRegistry::Stater(SqString const * const & nodedata, void *state) +{ + StoreEntry *entry = (StoreEntry *) state; + nodedata->stat(entry); +} + +#endif + +/* + * Similar to strtok, but has some rudimentary knowledge + * of quoting + */ +char * +strwordtok(char *buf, char **t) +{ + unsigned char *word = NULL; + unsigned char *p = (unsigned char *) buf; + unsigned char *d; + unsigned char ch; + int quoted = 0; + + if (!p) + p = (unsigned char *) *t; + + if (!p) + goto error; + + while (*p && xisspace(*p)) + p++; + + if (!*p) + goto error; + + word = d = p; + + while ((ch = *p)) { + switch (ch) { + + case '\\': + p++; + + switch (*p) { + + case 'n': + ch = '\n'; + + break; + + case 'r': + ch = '\r'; + + break; + + default: + ch = *p; + + break; + + } + + *d++ = ch; + + if (ch) + p++; + + break; + + case '"': + quoted = !quoted; + + p++; + + break; + + default: + if (!quoted && xisspace(*p)) { + p++; + goto done; + } + + *d++ = *p++; + break; + } + } + +done: + *d++ = '\0'; + +error: + *t = (char *) p; + return (char *) word; +} + +#ifndef _USE_INLINE_ +#include "SqString.cci" +#endif Index: squid3/src/SqString.cci diff -u /dev/null squid3/src/SqString.cci:1.1.2.1 --- /dev/null Thu Jan 1 01:00:00 1970 +++ squid3/src/SqString.cci Sat May 5 09:09:00 2007 @@ -0,0 +1,166 @@ + +/* + * $Id$ + * + * DEBUG: section 67 String + * AUTHOR: Duane Wessels + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ + +SqString::SqString() : size_(0), len_(0), buf_ (NULL) +{ +#if DEBUGSTRINGS + SqStringRegistry::Instance().add(this); +#endif +} + +void +SqString::absorb(SqString &old) +{ + clear(); + size_ = old.size_; + buf_ = old.buf_; + len_ = old.len_; + old.size_ = 0; + old.buf_ = NULL; + old.len_ = 0; +} + +int +SqString::size() const +{ + return len_; +} + +char const * +SqString::c_str() const +{ + return buf_; +} + +const char * +SqString::pos(char const *aString) const +{ + return strstr(c_str(), aString); +} + +const char * +SqString::pos(char const ch) const +{ + return strchr(c_str(), ch); +} + +const char * +SqString::rpos(char const ch) const +{ + return strrchr(c_str(), ch); +} + +bool +SqString::empty() const +{ + return (buf_ == NULL || len_ == 0); +} + +int +SqString::compare(char const *aString) const +{ + /* strcmp fails on NULLS */ + + if (size() == 0 && (aString == NULL || aString[0] == '\0')) + return 0; + + if (size() == 0) + return -1; + + if (aString == NULL || aString[0] == '\0') + return 1; + + return strcmp(c_str(), aString); +} + +int +SqString::compare(char const *aString, size_t count) const +{ + /* always the same at length 0 */ + + if (count == 0) + return 0; + + if (size() == 0 && (aString == NULL || aString[0] == '\0')) + return 0; + + if (size() == 0) + return -1; + + if (aString == NULL || aString[0] == '\0') + return 1; + + return strncmp(c_str(), aString, count); +} + +int +SqString::compare(SqString const &aString) const +{ + /* strcmp fails on NULLS */ + + if (size() == 0 && aString.size() == 0) + return 0; + + if (size() == 0) + return -1; + + if (aString.size() == 0) + return 1; + + return strcmp(c_str(), aString.c_str()); +} + +/* FIXME: this is can perform buffer overflows and underflows! */ +void +SqString::set (char const *loc, char const ch) +{ + buf_[loc-buf_] = ch; +} + +/* FIXME: this is can perform buffer overflows and underflows! */ +void +SqString::cut (size_t newLength) +{ + len_ = newLength; + buf_[newLength] = '\0'; +} + +/* FIXME: this is can perform buffer overflows and underflows! */ +void +SqString::cutPointer (char const *loc) +{ + len_ = loc-buf_; + buf_[len_] = '\0'; +} Index: squid3/src/SqString.h diff -u /dev/null squid3/src/SqString.h:1.1.2.4 --- /dev/null Thu Jan 1 01:00:00 1970 +++ squid3/src/SqString.h Mon May 7 05:01:04 2007 @@ -0,0 +1,155 @@ + +/* + * $Id$ + * + * DEBUG: section 67 String + * AUTHOR: Duane Wessels + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ + +#ifndef SQSTRING_H +#define SQSTRING_H + +/* forward decls */ + +class CacheManager; + +#define DEBUGSTRINGS 0 +#if DEBUGSTRINGS +#include "splay.h" + +class SqString; + +class SqStringRegistry +{ + +public: + static StringRegistry &Instance(); + + void add + (SqString const *); + + void registerWithCacheManager(CacheManager & manager); + + void remove + (SqString const *); + +private: + static OBJH Stat; + + static StringRegistry Instance_; + + static SplayNode::SPLAYWALKEE Stater; + + Splay entries; + + bool registered; + +}; + +class StoreEntry; +#endif + +class SqString +{ + +public: + + /* std::string API available */ + _SQUID_INLINE_ SqString(); + SqString (char const *); + SqString (SqString const &); + ~SqString(); + + SqString &operator =(char const *); + SqString &operator =(SqString const &); + bool operator ==(SqString const &) const; + bool operator !=(SqString const &) const; + bool operator >=(SqString const &) const; + bool operator <=(SqString const &) const; + bool operator >(SqString const &) const; + bool operator <(SqString const &) const; + + _SQUID_INLINE_ int size() const; + _SQUID_INLINE_ char const * c_str() const; + + char& operator [](unsigned int); + + void clear(); + + void append(char const *buf, int len); + void append(char const *buf); + void append(char const); + void append(SqString const &); + + _SQUID_INLINE_ bool empty() const; + _SQUID_INLINE_ int compare(char const *) const; + _SQUID_INLINE_ int compare(char const *, size_t count) const; + _SQUID_INLINE_ int compare(SqString const &) const; + +/* Custom Squid Operations available */ + /// Super-efficient string assignment. Moves internal content from one object to another. + /// then resets the initial pobject to empty. + _SQUID_INLINE_ void absorb(SqString &old); + _SQUID_INLINE_ const char * pos(char const *) const; + _SQUID_INLINE_ const char * pos(char const ch) const; + _SQUID_INLINE_ const char * rpos(char const ch) const; + + _SQUID_INLINE_ void set + (char const *loc, char const ch); + + _SQUID_INLINE_ void cut (size_t newLength); + + _SQUID_INLINE_ void cutPointer (char const *loc); + +#if DEBUGSTRINGS + + void stat (StoreEntry *) const; + +#endif + + void limitInit(const char *str, int len); +private: + void initBuf(size_t sz); + void init (char const *); + + /* never reference these directly! */ + unsigned short int size_; /* buffer size; 64K limit */ + + unsigned short int len_; /* current length */ + + char *buf_; +}; + +#ifdef _USE_INLINE_ +#include "SqString.cci" +#endif + +#endif /* SQSTRING_H */ + Index: squid3/src/SquidString.h diff -u squid3/src/SquidString.h:1.8 squid3/src/SquidString.h:1.8.8.5 --- squid3/src/SquidString.h:1.8 Sun May 28 17:50:18 2006 +++ squid3/src/SquidString.h Mon May 7 03:32:22 2007 @@ -3,7 +3,7 @@ * $Id$ * * DEBUG: section 67 String - * AUTHOR: Duane Wessels + * AUTHOR: Duane Wessels, Amos Jeffries * * SQUID Web Proxy Cache http://www.squid-cache.org/ * ---------------------------------------------------------- @@ -33,112 +33,68 @@ * */ +/** + * + * To allow for easy future updates to the string handling within squid + * We adopt the std::string API as the basis for string operations. + * Then we typedef string (due to namespacing actually ::Squid::string) + * as the preferred string handling class. + * For Release 3.0 it is intended that the old String (no SquidString) + * Will be the default string type. + * For Release 3.1 it is expected that either std::string of another + * custom managed type will be defined as default. + * + * NP: checkout http://johnpanzer.com/tsc_cuj/ToolboxOfStrings.html + * for possibly better and faster strings. + * + * This has been done for several reasons: + * + * The initial String implementation was incomplete and non-standard + * std::string provides a better known API for string handling + * std::string or a derivative may be used in future within squid + * String is a defined alternative to std::string in some systems + * + * These changes: + * - move the old String class to SquidString making the + * internal definition explicit. + * - provide the well-known type of 'string' for general use + * - migrate custom functions to well-known API: + * buf() -> c_str() + * clean() -> clear() + * - remove redundant functions: + * buf(char*) -> operator=(char*) + * initBuf(char*) -> operator=(char*) + * reset(char*) -> operator=(char*) + * - make init(char*) private for use by various assignment/costructor + * - define standard string operators + * - define debugs stream operator + * + */ + #ifndef SQUID_STRING_H #define SQUID_STRING_H -/* forward decls */ - -class CacheManager; - -#define DEBUGSTRINGS 0 -#if DEBUGSTRINGS -#include "splay.h" - -class String; - -class StringRegistry -{ - -public: - static StringRegistry &Instance(); - - void add - (String const *); - - void registerWithCacheManager(CacheManager & manager); - - void remove - (String const *); + /* Provide standard 'string' type */ + /* class defined by the #include file MUST present the basic std::string API */ + /* at least partially as not all operatios are used by squid. */ + /* API Ref: http://www.sgi.com/tech/stl/basic_string.html */ -private: - static OBJH Stat; +#include "SqString.h" +typedef SqString string; - static StringRegistry Instance_; - static SplayNode::SPLAYWALKEE Stater; + /* Overload standard C functions using the basic string API */ - Splay entries; +inline int strncasecmp(const string &lhs, const string &rhs, size_t len) { return strncasecmp(lhs.c_str(), rhs.c_str(), len); } +inline int strcasecmp(const string &lhs, const string &rhs) { return strcasecmp(lhs.c_str(), rhs.c_str()); } - bool registered; +inline int strncmp(const string &lhs, const string &rhs, size_t len) { return strncmp(lhs.c_str(), rhs.c_str(), len); } +inline int strcmp(const string &lhs, const string &rhs) { return strcmp(lhs.c_str(), rhs.c_str()); } -}; +inline const char * strpbrk(const string &lhs, const string &rhs) { return strpbrk(lhs.c_str(), rhs.c_str()); } -class StoreEntry; -#endif +inline const char * strstr(const string &lhs, const string &rhs) { return strstr(lhs.c_str(), rhs.c_str()); } -class String -{ - -public: - _SQUID_INLINE_ String(); - String (char const *); - String (String const &); - ~String(); - - String &operator =(char const *); - String &operator =(String const &); - bool operator ==(String const &) const; - bool operator !=(String const &) const; - - _SQUID_INLINE_ int size() const; - _SQUID_INLINE_ char const * buf() const; - void buf(char *); - void init (char const *); - void initBuf(size_t sz); - void limitInit(const char *str, int len); - void clean(); - void reset(char const *str); - void append(char const *buf, int len); - void append(char const *buf); - void append(char const); - void append (String const &); - void absorb(String &old); - _SQUID_INLINE_ const char * pos(char const *) const; - _SQUID_INLINE_ const char * pos(char const ch) const; - _SQUID_INLINE_ const char * rpos(char const ch) const; - _SQUID_INLINE_ int cmp (char const *) const; - _SQUID_INLINE_ int cmp (char const *, size_t count) const; - _SQUID_INLINE_ int cmp (String const &) const; - _SQUID_INLINE_ int caseCmp (char const *) const; - _SQUID_INLINE_ int caseCmp (char const *, size_t count) const; - - _SQUID_INLINE_ void set - (char const *loc, char const ch); - - _SQUID_INLINE_ void cut (size_t newLength); - - _SQUID_INLINE_ void cutPointer (char const *loc); - -#if DEBUGSTRINGS - - void stat (StoreEntry *) const; - -#endif - -private: - /* never reference these directly! */ - unsigned short int size_; /* buffer size; 64K limit */ - - unsigned short int len_; /* current length */ - - char *buf_; -}; - -_SQUID_INLINE_ std::ostream & operator<<(std::ostream& os, String const &aString); - -#ifdef _USE_INLINE_ -#include "String.cci" -#endif +inline std::ostream& operator <<(std::ostream &os, const string &s) { os << s.c_str(); return os; } #endif /* SQUID_STRING_H */ - Index: squid3/src/Store.h diff -u squid3/src/Store.h:1.32 squid3/src/Store.h:1.25.4.2 --- squid3/src/Store.h:1.32 Sat Apr 21 00:52:54 2007 +++ squid3/src/Store.h Tue May 1 09:09:27 2007 @@ -258,7 +258,7 @@ /* TODO: imeplement the async version */ virtual void get - (String const key , STOREGETCLIENT callback, void *cbdata) = 0; + (string const key , STOREGETCLIENT callback, void *cbdata) = 0; /* prepare the store for use. The store need not be usable immediately, * it should respond to readable() and writable() with true as soon @@ -282,7 +282,7 @@ virtual void unlink (StoreEntry &); /* search in the store */ - virtual StoreSearch *search(String const url, HttpRequest *) = 0; + virtual StoreSearch *search(string const url, HttpRequest *) = 0; /* pulled up from SwapDir for migration.... probably do not belong here */ virtual void reference(StoreEntry &) = 0; /* Reference this object */ Index: squid3/src/StoreHashIndex.h diff -u squid3/src/StoreHashIndex.h:1.2 squid3/src/StoreHashIndex.h:1.2.14.1 --- squid3/src/StoreHashIndex.h:1.2 Sun Jul 3 19:14:11 2005 +++ squid3/src/StoreHashIndex.h Tue May 1 17:09:51 2007 @@ -57,7 +57,7 @@ (const cache_key *); virtual void get - (String const, STOREGETCLIENT, void * cbdata); + (string const, STOREGETCLIENT, void * cbdata); virtual void init(); @@ -77,7 +77,7 @@ virtual void updateSize(size_t, int); - virtual StoreSearch *search(String const url, HttpRequest *); + virtual StoreSearch *search(string const url, HttpRequest *); private: /* migration logic */ Index: squid3/src/String.cc diff -u squid3/src/String.cc:1.12 squid3/src/String.cc:removed --- squid3/src/String.cc:1.12 Fri Apr 6 05:54:13 2007 +++ squid3/src/String.cc Mon May 7 05:03:30 2007 @@ -1,413 +0,0 @@ - -/* - * $Id$ - * - * DEBUG: section 67 String - * AUTHOR: Duane Wessels - * - * SQUID Web Proxy Cache http://www.squid-cache.org/ - * ---------------------------------------------------------- - * - * Squid is the result of efforts by numerous individuals from - * the Internet community; see the CONTRIBUTORS file for full - * details. Many organizations have provided support for Squid's - * development; see the SPONSORS file for full details. Squid is - * Copyrighted (C) 2001 by the Regents of the University of - * California; see the COPYRIGHT file for full details. Squid - * incorporates software developed and/or copyrighted by other - * sources; see the CREDITS file for full details. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. - * - */ - -#include "squid.h" -#include "Store.h" - -void -String::initBuf(size_t sz) -{ - PROF_start(StringInitBuf); - buf((char *)memAllocString(sz, &sz)); - assert(sz < 65536); - size_ = sz; - PROF_stop(StringInitBuf); -} - -void -String::init(char const *str) -{ - assert(this); - - PROF_start(StringInit); - if (str) - limitInit(str, strlen(str)); - else - clean(); - PROF_stop(StringInit); -} - -String::String (char const *aString) : size_(0), len_(0), buf_(NULL) -{ - init (aString); -#if DEBUGSTRINGS - - StringRegistry::Instance().add(this); -#endif -} - -String & -String::operator =(char const *aString) -{ - clean(); - init (aString); - return *this; -} - -String & -String::operator = (String const &old) -{ - clean (); - - if (old.len_) - limitInit (old.buf(), old.len_); - - return *this; -} - -bool -String::operator == (String const &that) const -{ - if (0 == this->cmp(that)) - return true; - - return false; -} - -bool -String::operator != (String const &that) const -{ - if (0 == this->cmp(that)) - return false; - - return true; -} - -void -String::limitInit(const char *str, int len) -{ - PROF_start(StringLimitInit); - assert(this && str); - initBuf(len + 1); - len_ = len; - xmemcpy(buf_, str, len); - buf_[len] = '\0'; - PROF_stop(StringLimitInit); -} - -String::String (String const &old) : size_(0), len_(0), buf_(NULL) -{ - init (old.buf()); -#if DEBUGSTRINGS - - StringRegistry::Instance().add(this); -#endif -} - -void -String::clean() -{ - PROF_start(StringClean); - assert(this); - - if (buf()) - memFreeString(size_, buf_); - - len_ = 0; - - size_ = 0; - - buf_ = NULL; - PROF_stop(StringClean); -} - -String::~String() -{ - clean(); -#if DEBUGSTRINGS - - StringRegistry::Instance().remove(this); -#endif -} - -void -String::reset(const char *str) -{ - PROF_start(StringReset); - clean(); - init(str); - PROF_stop(StringReset); -} - -void -String::append(const char *str, int len) -{ - assert(this); - assert(str && len >= 0); - - PROF_start(StringAppend); - if (len_ + len < size_) { - strncat(buf_, str, len); - len_ += len; - } else { - String snew; - snew.len_ = len_ + len; - snew.initBuf(snew.len_ + 1); - - if (buf_) - xmemcpy(snew.buf_, buf(), len_); - - if (len) - xmemcpy(snew.buf_ + len_, str, len); - - snew.buf_[snew.len_] = '\0'; - - absorb(snew); - } - PROF_stop(StringAppend); -} - -void -String::append(char const *str) -{ - assert (str); - append (str, strlen(str)); -} - -void -String::append (char chr) -{ - char myString[2]; - myString[0]=chr; - myString[1]='\0'; - append (myString, 1); -} - -void -String::append(String const &old) -{ - append (old.buf(), old.len_); -} - -void -String::absorb(String &old) -{ - clean(); - size_ = old.size_; - buf (old.buf_); - len_ = old.len_; - old.size_ = 0; - old.buf_ = NULL; - old.len_ = 0; -} - -void -String::buf(char *newBuf) -{ - assert (buf_ == NULL); - buf_ = newBuf; -} - -#if DEBUGSTRINGS -void -String::stat(StoreEntry *entry) const -{ - storeAppendPrintf(entry, "%p : %d/%d \"%s\"\n",this,len_, size_, buf()); -} - -StringRegistry & -StringRegistry::Instance() -{ - return Instance_; -} - -template -int -ptrcmp(C const &lhs, C const &rhs) -{ - return lhs - rhs; -} - -void -StringRegistry::registerWithCacheManager(CacheManager & manager) -{ - manager.registerAction("strings", - "Strings in use in squid", Stat, 0, 1); -} - -void - -StringRegistry::add - (String const *entry) -{ - entries.insert(entry, ptrcmp); -} - -void - -StringRegistry::remove - (String const *entry) -{ - entries.remove(entry, ptrcmp); -} - -StringRegistry StringRegistry::Instance_; - -extern size_t memStringCount(); - -void -StringRegistry::Stat(StoreEntry *entry) -{ - storeAppendPrintf(entry, "%lu entries, %lu reported from MemPool\n", (unsigned long) Instance().entries.elements, (unsigned long) memStringCount()); - Instance().entries.head->walk(Stater, entry); -} - -void -StringRegistry::Stater(String const * const & nodedata, void *state) -{ - StoreEntry *entry = (StoreEntry *) state; - nodedata->stat(entry); -} - -#endif - -/* TODO: move onto String */ -int -stringHasWhitespace(const char *s) -{ - return strpbrk(s, w_space) != NULL; -} - -/* TODO: move onto String */ -int -stringHasCntl(const char *s) -{ - unsigned char c; - - while ((c = (unsigned char) *s++) != '\0') { - if (c <= 0x1f) - return 1; - - if (c >= 0x7f && c <= 0x9f) - return 1; - } - - return 0; -} - -/* - * Similar to strtok, but has some rudimentary knowledge - * of quoting - */ -char * -strwordtok(char *buf, char **t) -{ - unsigned char *word = NULL; - unsigned char *p = (unsigned char *) buf; - unsigned char *d; - unsigned char ch; - int quoted = 0; - - if (!p) - p = (unsigned char *) *t; - - if (!p) - goto error; - - while (*p && xisspace(*p)) - p++; - - if (!*p) - goto error; - - word = d = p; - - while ((ch = *p)) { - switch (ch) { - - case '\\': - p++; - - switch (*p) { - - case 'n': - ch = '\n'; - - break; - - case 'r': - ch = '\r'; - - break; - - default: - ch = *p; - - break; - - } - - *d++ = ch; - - if (ch) - p++; - - break; - - case '"': - quoted = !quoted; - - p++; - - break; - - default: - if (!quoted && xisspace(*p)) { - p++; - goto done; - } - - *d++ = *p++; - break; - } - } - -done: - *d++ = '\0'; - -error: - *t = (char *) p; - return (char *) word; -} - -const char * -checkNullString(const char *p) -{ - return p ? p : "(NULL)"; -} - -#ifndef _USE_INLINE_ -#include "String.cci" -#endif Index: squid3/src/String.cci diff -u squid3/src/String.cci:1.6 squid3/src/String.cci:removed --- squid3/src/String.cci:1.6 Fri Sep 1 16:50:33 2006 +++ squid3/src/String.cci Mon May 7 05:03:30 2007 @@ -1,169 +0,0 @@ - -/* - * $Id$ - * - * DEBUG: section 67 String - * AUTHOR: Duane Wessels - * - * SQUID Web Proxy Cache http://www.squid-cache.org/ - * ---------------------------------------------------------- - * - * Squid is the result of efforts by numerous individuals from - * the Internet community; see the CONTRIBUTORS file for full - * details. Many organizations have provided support for Squid's - * development; see the SPONSORS file for full details. Squid is - * Copyrighted (C) 2001 by the Regents of the University of - * California; see the COPYRIGHT file for full details. Squid - * incorporates software developed and/or copyrighted by other - * sources; see the CREDITS file for full details. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. - * - */ - -String::String() : size_(0), len_(0), buf_ (NULL) -{ -#if DEBUGSTRINGS - StringRegistry::Instance().add(this); -#endif -} - -int -String::size() const -{ - return len_; -} - -char const * -String::buf() const -{ - return buf_; -} - -const char * -String::pos(char const *aString) const -{ - return strstr(buf(), aString); -} - -const char * -String::pos(char const ch) const -{ - return strchr(buf(), ch); -} - -const char * -String::rpos(char const ch) const -{ - return strrchr(buf(), (ch)); -} - -int -String::cmp (char const *aString) const -{ - /* strcmp fails on NULLS */ - - if (size() == 0 && (aString == NULL || aString[0] == '\0')) - return 0; - - if (size() == 0) - return -1; - - if (aString == NULL || aString[0] == '\0') - return 1; - - return strcmp(buf(), aString); -} - -int -String::cmp (char const *aString, size_t count) const -{ - /* always the same at length 0 */ - - if (count == 0) - return 0; - - if (size() == 0 && (aString == NULL || aString[0] == '\0')) - return 0; - - if (size() == 0) - return -1; - - if (aString == NULL || aString[0] == '\0') - return 1; - - return strncmp(buf(), aString, count); -} - -int -String::cmp (String const &aString) const -{ - /* strcmp fails on NULLS */ - - if (size() == 0 && aString.size() == 0) - return 0; - - if (size() == 0) - return -1; - - if (aString.size() == 0) - return 1; - - return strcmp(buf(), aString.buf()); -} - -int -String::caseCmp (char const *aString) const -{ - return strcasecmp(buf(), aString); -} - -int -String::caseCmp (char const *aString, size_t count) const -{ - return strncasecmp(buf(), aString, count); -} - -/* FIXME: this is can perform buffer overflows and underflows! */ -void -String::set (char const *loc, char const ch) -{ - buf_[loc-buf_] = ch; -} - -/* FIXME: this is can perform buffer overflows and underflows! */ -void -String::cut (size_t newLength) -{ - len_ = newLength; - buf_[newLength] = '\0'; -} - -/* FIXME: this is can perform buffer overflows and underflows! */ -void -String::cutPointer (char const *loc) -{ - len_ = loc-buf_; - buf_[len_] = '\0'; -} - -std::ostream & -operator<<(std::ostream& os, String const &aString) -{ - os << aString.buf(); - return os; -} - - Index: squid3/src/SwapDir.cc diff -u squid3/src/SwapDir.cc:1.11 squid3/src/SwapDir.cc:1.7.18.4 --- squid3/src/SwapDir.cc:1.11 Mon Apr 30 10:51:35 2007 +++ squid3/src/SwapDir.cc Tue May 1 17:09:51 2007 @@ -276,7 +276,7 @@ void SwapDir::get - (String const key, STOREGETCLIENT callback, void *cbdata) + (string const key, STOREGETCLIENT callback, void *cbdata) { fatal("not implemented"); } Index: squid3/src/SwapDir.h diff -u squid3/src/SwapDir.h:1.12 squid3/src/SwapDir.h:1.12.8.1 --- squid3/src/SwapDir.h:1.12 Sun Aug 20 18:51:49 2006 +++ squid3/src/SwapDir.h Tue May 1 09:09:27 2007 @@ -60,7 +60,7 @@ (const cache_key *); virtual void get - (String const, STOREGETCLIENT, void * cbdata); + (string const, STOREGETCLIENT, void * cbdata); virtual void init(); @@ -74,7 +74,7 @@ virtual void sync(); /* Sync the store prior to shutdown */ - virtual StoreSearch *search(String const url, HttpRequest *); + virtual StoreSearch *search(string const url, HttpRequest *); virtual void reference(StoreEntry &); /* Reference this object */ @@ -134,13 +134,13 @@ (const cache_key *); virtual void get - (String const, STOREGETCLIENT, void * cbdata); + (string const, STOREGETCLIENT, void * cbdata); virtual size_t maxSize() const { return max_size;} virtual size_t minSize() const; virtual void stat (StoreEntry &anEntry) const; - virtual StoreSearch *search(String const url, HttpRequest *) = 0; + virtual StoreSearch *search(string const url, HttpRequest *) = 0; virtual void updateSize(size_t size, int sign); Index: squid3/src/access_log.cc diff -u squid3/src/access_log.cc:1.44 squid3/src/access_log.cc:1.41.4.6 --- squid3/src/access_log.cc:1.44 Sat Apr 28 15:51:48 2007 +++ squid3/src/access_log.cc Thu May 3 08:03:35 2007 @@ -516,7 +516,7 @@ logformat_token *fmt; static MemBuf mb; char tmp[1024]; - String sb; + string sb; mb.reset(); @@ -626,7 +626,7 @@ if (al->request) sb = al->request->header.getByName(fmt->data.header.header); - out = sb.buf(); + out = sb.c_str(); quote = 1; @@ -636,7 +636,7 @@ if (al->reply) sb = al->request->header.getByName(fmt->data.header.header); - out = sb.buf(); + out = sb.c_str(); quote = 1; @@ -646,7 +646,7 @@ if (al->request) sb = al->request->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator); - out = sb.buf(); + out = sb.c_str(); quote = 1; @@ -656,7 +656,7 @@ if (al->reply) sb = al->request->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator); - out = sb.buf(); + out = sb.c_str(); quote = 1; @@ -804,7 +804,7 @@ case LFT_TAG: if (al->request) - out = al->request->tag.buf(); + out = al->request->tag.c_str(); quote = 1; @@ -812,7 +812,7 @@ case LFT_EXT_LOG: if (al->request) - out = al->request->extacl_log.buf(); + out = al->request->extacl_log.c_str(); quote = 1; @@ -882,7 +882,7 @@ if (fmt->space) mb.append(" ", 1); - sb.clean(); + sb.clear(); if (dofree) safe_free(out); @@ -1622,8 +1622,8 @@ static void fvdbInit(void) { - via_table = hash_create((HASHCMP *) strcmp, 977, hash4); - forw_table = hash_create((HASHCMP *) strcmp, 977, hash4); + via_table = hash_create((HASHCMP *) std::strcmp, 977, hash4); + forw_table = hash_create((HASHCMP *) std::strcmp, 977, hash4); } static void @@ -1708,10 +1708,10 @@ { hashFreeItems(via_table, fvdbFreeEntry); hashFreeMemory(via_table); - via_table = hash_create((HASHCMP *) strcmp, 977, hash4); + via_table = hash_create((HASHCMP *) std::strcmp, 977, hash4); hashFreeItems(forw_table, fvdbFreeEntry); hashFreeMemory(forw_table); - forw_table = hash_create((HASHCMP *) strcmp, 977, hash4); + forw_table = hash_create((HASHCMP *) std::strcmp, 977, hash4); } #endif Index: squid3/src/cache_cf.cc diff -u squid3/src/cache_cf.cc:1.81 squid3/src/cache_cf.cc:1.79.2.6 --- squid3/src/cache_cf.cc:1.81 Sat Apr 28 15:51:48 2007 +++ squid3/src/cache_cf.cc Sat May 5 07:33:54 2007 @@ -2201,14 +2201,14 @@ } void -ConfigParser::ParseString(String *var) +ConfigParser::ParseString(string &var) { char *token = strtok(NULL, w_space); if (token == NULL) self_destruct(); - var->reset(token); + var = token; } static void Index: squid3/src/client_db.cc diff -u squid3/src/client_db.cc:1.11 squid3/src/client_db.cc:1.10.8.2 --- squid3/src/client_db.cc:1.11 Sat Apr 28 15:51:49 2007 +++ squid3/src/client_db.cc Thu May 3 06:37:05 2007 @@ -80,7 +80,7 @@ if (client_table) return; - client_table = hash_create((HASHCMP *) strcmp, CLIENT_DB_HASH_SIZE, hash_string); + client_table = hash_create((HASHCMP *) std::strcmp, CLIENT_DB_HASH_SIZE, hash_string); } void Index: squid3/src/client_side.cc diff -u squid3/src/client_side.cc:1.125 squid3/src/client_side.cc:1.119.2.4 --- squid3/src/client_side.cc:1.125 Mon Apr 30 10:51:35 2007 +++ squid3/src/client_side.cc Thu May 3 03:05:11 2007 @@ -459,7 +459,7 @@ aLogEntry->http.version = request->http_ver; aLogEntry->hier = request->hier; - aLogEntry->cache.extuser = request->extacl_user.buf(); + aLogEntry->cache.extuser = request->extacl_user.c_str(); if (request->auth_user_request) { @@ -483,10 +483,10 @@ if (al.reply) { al.http.code = al.reply->sline.status; - al.http.content_type = al.reply->content_type.buf(); + al.http.content_type = al.reply->content_type.c_str(); } else if (loggingEntry() && loggingEntry()->mem_obj) { al.http.code = loggingEntry()->mem_obj->getReply()->sline.status; - al.http.content_type = loggingEntry()->mem_obj->getReply()->content_type.buf(); + al.http.content_type = loggingEntry()->mem_obj->getReply()->content_type.c_str(); } debugs(33, 9, "clientLogRequest: http.code='" << al.http.code << "'"); @@ -543,7 +543,7 @@ safe_free(uri); safe_free(log_uri); safe_free(redirect.location); - range_iter.boundary.clean(); + range_iter.boundary.clear(); HTTPMSGUNLOCK(request); if (client_stream.tail) @@ -828,15 +828,15 @@ /* put terminating boundary for multiparts */ static void -clientPackTermBound(String boundary, MemBuf * mb) +clientPackTermBound(string boundary, MemBuf * mb) { - mb->Printf("\r\n--%s--\r\n", boundary.buf()); + mb->Printf("\r\n--%s--\r\n", boundary.c_str()); debugs(33, 6, "clientPackTermBound: buf offset: " << mb->size); } /* appends a "part" HTTP header (as in a multi-part/range reply) to the buffer */ static void -clientPackRangeHdr(const HttpReply * rep, const HttpHdrRangeSpec * spec, String boundary, MemBuf * mb) +clientPackRangeHdr(const HttpReply * rep, const HttpHdrRangeSpec * spec, string boundary, MemBuf * mb) { HttpHeader hdr(hoReply); Packer p; @@ -844,10 +844,9 @@ assert(spec); /* put boundary */ - debugs(33, 5, "clientPackRangeHdr: appending boundary: " << - boundary.buf()); + debugs(33, 5, "clientPackRangeHdr: appending boundary: " << boundary); /* rfc2046 requires to _prepend_ boundary with ! */ - mb->Printf("\r\n--%s\r\n", boundary.buf()); + mb->Printf("\r\n--%s\r\n", boundary.c_str()); /* stuff the header with required entries and pack it */ @@ -1039,12 +1038,12 @@ /* generates a "unique" boundary string for multipart responses * the caller is responsible for cleaning the string */ -String +string ClientHttpRequest::rangeBoundaryStr() const { assert(this); const char *key; - String b (full_appname_string); + string b (full_appname_string); b.append (":",1); key = storeEntry()->getMD5Text(); b.append(key, strlen(key)); @@ -1156,7 +1155,7 @@ hdr->delById(HDR_CONTENT_TYPE); httpHeaderPutStrf(hdr, HDR_CONTENT_TYPE, "multipart/byteranges; boundary=\"%s\"", - http->range_iter.boundary.buf()); + http->range_iter.boundary.c_str()); /* Content-Length is not required in multipart responses * but it is always nice to have one */ actual_clen = http->mRangeCLen(); @@ -2189,11 +2188,11 @@ request->flags.tproxy = conn->port->tproxy; #endif - if (internalCheck(request->urlpath.buf())) { + if (internalCheck(request->urlpath.c_str())) { if (internalHostnameIs(request->host) && request->port == getMyPort()) { http->flags.internal = 1; - } else if (Config.onoff.global_internal_static && internalStaticCheck(request->urlpath.buf())) { + } else if (Config.onoff.global_internal_static && internalStaticCheck(request->urlpath.c_str())) { xstrncpy(request->host, internalHostname(), SQUIDHOSTNAMELEN); request->port = getMyPort(); Index: squid3/src/client_side_reply.cc diff -u squid3/src/client_side_reply.cc:1.96 squid3/src/client_side_reply.cc:1.90.4.3 --- squid3/src/client_side_reply.cc:1.96 Mon Apr 30 10:51:35 2007 +++ squid3/src/client_side_reply.cc Tue May 1 09:09:27 2007 @@ -1263,7 +1263,7 @@ while ((e = hdr->getEntry(&pos))) { if (e->id == HDR_WWW_AUTHENTICATE || e->id == HDR_PROXY_AUTHENTICATE) { - const char *value = e->value.buf(); + const char *value = e->value.c_str(); if ((strncasecmp(value, "NTLM", 4) == 0 && (value[4] == '\0' || value[4] == ' ')) @@ -1313,7 +1313,7 @@ /* Append VIA */ { LOCAL_ARRAY(char, bbuf, MAX_URL + 32); - String strVia; + string strVia; hdr->getList(HDR_VIA, &strVia); snprintf(bbuf, sizeof(bbuf), "%d.%d %s", reply->sline.version.major, @@ -1321,7 +1321,7 @@ ThisCache); strListAdd(&strVia, bbuf, ','); hdr->delById(HDR_VIA); - hdr->putStr(HDR_VIA, strVia.buf()); + hdr->putStr(HDR_VIA, strVia.c_str()); } /* Signal keep-alive if needed */ hdr->putStr(http->flags.accel ? HDR_CONNECTION : HDR_PROXY_CONNECTION, Index: squid3/src/client_side_request.cc diff -u squid3/src/client_side_request.cc:1.69 squid3/src/client_side_request.cc:1.66.4.5 --- squid3/src/client_side_request.cc:1.69 Sat Apr 28 15:51:49 2007 +++ squid3/src/client_side_request.cc Thu May 3 06:37:05 2007 @@ -630,12 +630,10 @@ #else if (req_hdr->has(HDR_PRAGMA)) { - String s = req_hdr->getList(HDR_PRAGMA); + string s = req_hdr->getList(HDR_PRAGMA); if (strListIsMember(&s, "no-cache", ',')) no_cache++; - - s.clean(); } if (request->cache_control) @@ -714,7 +712,7 @@ request->flags.auth = 1; if (req_hdr->has(HDR_VIA)) { - String s = req_hdr->getList(HDR_VIA); + string s = req_hdr->getList(HDR_VIA); /* * ThisCache cannot be a member of Via header, "1.0 ThisCache" can. * Note ThisCache2 has a space prepended to the hostname so we don't @@ -728,11 +726,11 @@ } #if FORW_VIA_DB - fvdbCountVia(s.buf()); + fvdbCountVia(s.c_str()); #endif - s.clean(); + s.clear(); } #if USE_USERAGENT_LOG @@ -749,9 +747,9 @@ #if FORW_VIA_DB if (req_hdr->has(HDR_X_FORWARDED_FOR)) { - String s = req_hdr->getList(HDR_X_FORWARDED_FOR); - fvdbCountForw(s.buf()); - s.clean(); + string s = req_hdr->getList(HDR_X_FORWARDED_FOR); + fvdbCountForw(s.c_str()); + s.clear(); } #endif Index: squid3/src/client_side_request.h diff -u squid3/src/client_side_request.h:1.25 squid3/src/client_side_request.h:1.25.4.1 --- squid3/src/client_side_request.h:1.25 Thu Apr 5 22:52:36 2007 +++ squid3/src/client_side_request.h Tue May 1 09:09:27 2007 @@ -76,7 +76,7 @@ ClientHttpRequest(ClientHttpRequest const &); ClientHttpRequest& operator=(ClientHttpRequest const &); - String rangeBoundaryStr() const; + string rangeBoundaryStr() const; void freeResources(); void updateCounters(); void logRequest(); Index: squid3/src/dns_internal.cc diff -u squid3/src/dns_internal.cc:1.40 squid3/src/dns_internal.cc:1.38.2.2 --- squid3/src/dns_internal.cc:1.40 Mon Apr 30 10:51:35 2007 +++ squid3/src/dns_internal.cc Thu May 3 06:37:05 2007 @@ -1238,7 +1238,7 @@ if (!init) { memDataInit(MEM_IDNS_QUERY, "idns_query", sizeof(idns_query), 0); memset(RcodeMatrix, '\0', sizeof(RcodeMatrix)); - idns_lookup_hash = hash_create((HASHCMP *) strcmp, 103, hash_string); + idns_lookup_hash = hash_create((HASHCMP *) std::strcmp, 103, hash_string); init++; } } Index: squid3/src/errorpage.cc diff -u squid3/src/errorpage.cc:1.45 squid3/src/errorpage.cc:1.41.4.3 --- squid3/src/errorpage.cc:1.45 Mon Apr 30 10:51:36 2007 +++ squid3/src/errorpage.cc Tue May 1 09:09:27 2007 @@ -540,7 +540,7 @@ Packer p; str.Printf("%s %s HTTP/%d.%d\n", RequestMethodStr[r->method], - r->urlpath.size() ? r->urlpath.buf() : "/", + r->urlpath.size() ? r->urlpath.c_str() : "/", r->http_ver.major, r->http_ver.minor); packerToMemInit(&p, &str); r->header.packInto(&p); @@ -745,7 +745,7 @@ Packer p; mb.Printf("%s %s HTTP/%d.%d\n", RequestMethodStr[r->method], - r->urlpath.size() ? r->urlpath.buf() : "/", + r->urlpath.size() ? r->urlpath.c_str() : "/", r->http_ver.major, r->http_ver.minor); packerToMemInit(&p, &mb); r->header.packInto(&p); Index: squid3/src/external_acl.cc diff -u squid3/src/external_acl.cc:1.54 squid3/src/external_acl.cc:1.52.4.5 --- squid3/src/external_acl.cc:1.54 Sat Apr 28 15:51:52 2007 +++ squid3/src/external_acl.cc Thu May 3 06:37:05 2007 @@ -689,7 +689,7 @@ external_acl_cache_touch(acl->def, entry); result = entry->result; - external_acl_message = entry->message.buf(); + external_acl_message = entry->message.c_str(); debugs(82, 2, "aclMatchExternal: " << acl->def->name << " = " << result); @@ -759,7 +759,7 @@ for (format = acl_data->def->format; format; format = format->next) { const char *str = NULL; - String sb; + string sb; switch (format->type) { @@ -812,7 +812,7 @@ break; case _external_acl_format::EXT_ACL_PATH: - str = request->urlpath.buf(); + str = request->urlpath.c_str(); break; case _external_acl_format::EXT_ACL_METHOD: @@ -821,22 +821,22 @@ case _external_acl_format::EXT_ACL_HEADER: sb = request->header.getByName(format->header); - str = sb.buf(); + str = sb.c_str(); break; case _external_acl_format::EXT_ACL_HEADER_ID: sb = request->header.getStrOrList(format->header_id); - str = sb.buf(); + str = sb.c_str(); break; case _external_acl_format::EXT_ACL_HEADER_MEMBER: sb = request->header.getByNameListMember(format->header, format->member, format->separator); - str = sb.buf(); + str = sb.c_str(); break; case _external_acl_format::EXT_ACL_HEADER_ID_MEMBER: sb = request->header.getListMember(format->header_id, format->member, format->separator); - str = sb.buf(); + str = sb.c_str(); break; #if USE_SSL @@ -886,7 +886,7 @@ #endif case _external_acl_format::EXT_ACL_EXT_USER: - str = request->extacl_user.buf(); + str = request->extacl_user.c_str(); break; case _external_acl_format::EXT_ACL_UNKNOWN: @@ -913,7 +913,7 @@ strwordquote(&mb, str); } - sb.clean(); + sb.clear(); first = 0; } @@ -1236,8 +1236,8 @@ if (entry != NULL) { debugs(82, 4, "externalAclLookup: entry = { date=" << (long unsigned int) entry->date << ", result=" << - entry->result << ", user=" << entry->user.buf() << " tag=" << - entry->tag.buf() << " log=" << entry->log.buf() << " }"); + entry->result << ", user=" << entry->user << " tag=" << + entry->tag << " log=" << entry->log << " }"); } @@ -1270,7 +1270,7 @@ for (p = Config.externalAclHelperList; p; p = p->next) { if (!p->cache) - p->cache = hash_create((HASHCMP *) strcmp, hashPrime(1024), hash4); + p->cache = hash_create((HASHCMP *) std::strcmp, hashPrime(1024), hash4); if (!p->theHelper) p->theHelper = helperCreate(p->name); Index: squid3/src/fqdncache.cc diff -u squid3/src/fqdncache.cc:1.19 squid3/src/fqdncache.cc:1.18.8.2 --- squid3/src/fqdncache.cc:1.19 Sat Apr 28 15:51:52 2007 +++ squid3/src/fqdncache.cc Thu May 3 06:37:05 2007 @@ -527,7 +527,7 @@ n = hashPrime(fqdncache_high / 4); - fqdn_table = hash_create((HASHCMP *) strcmp, n, hash4); + fqdn_table = hash_create((HASHCMP *) std::strcmp, n, hash4); memDataInit(MEM_FQDNCACHE_ENTRY, "fqdncache_entry", sizeof(fqdncache_entry), 0); Index: squid3/src/ftp.cc diff -u squid3/src/ftp.cc:1.72 squid3/src/ftp.cc:1.62.4.8 --- squid3/src/ftp.cc:1.72 Fri May 4 17:15:36 2007 +++ squid3/src/ftp.cc Sat May 5 07:37:31 2007 @@ -126,9 +126,9 @@ int password_url; char *reply_hdr; int reply_hdr_state; - String clean_url; - String title_url; - String base_href; + string clean_url; + string title_url; + string base_href; int conn_att; int login_att; ftp_state_t state; @@ -443,9 +443,9 @@ safe_free(old_filepath); - title_url.clean(); + title_url.clear(); - base_href.clean(); + base_href.clear(); safe_free(filepath); @@ -509,7 +509,7 @@ wordlist *w; char *dirup; int i, j, k; - const char *title = title_url.buf(); + const char *title = title_url.c_str(); flags.listing_started = true; printfReplyBody("\n"); printfReplyBody("\n", @@ -528,7 +528,7 @@ if (flags.need_base_href) printfReplyBody("\n", - html_quote(base_href.buf())); + html_quote(base_href.c_str())); printfReplyBody("\n"); @@ -957,7 +957,7 @@ if (flags.dir_slash) { url = xstrdup("./"); } else { - const char *title = title_url.buf(); + const char *title = title_url.c_str(); int k = 6 + strcspn(&title[6], "/"); char *t; url = xstrdup(title + k); @@ -1438,11 +1438,11 @@ flags.isdir = 1; flags.root_dir = 1; flags.need_base_href = 1; /* Work around broken browsers */ - } else if (!request->urlpath.cmp("/%2f/")) { + } else if (!request->urlpath.compare("/%2f/")) { /* UNIX root directory */ flags.isdir = 1; flags.root_dir = 1; - } else if ((l >= 1) && (*(request->urlpath.buf() + l - 1) == '/')) { + } else if ((l >= 1) && (*(request->urlpath.c_str() + l - 1) == '/')) { /* Directory URL, ending in / */ flags.isdir = 1; @@ -1530,7 +1530,7 @@ checkUrlpath(); buildTitleUrl(); debugs(9, 5, "ftpStart: host=" << request->host << ", path=" << - request->urlpath.buf() << ", user=" << user << ", passwd=" << + request->urlpath << ", user=" << user << ", passwd=" << password); state = BEGIN; @@ -1955,7 +1955,7 @@ mode = 'A'; } else { t = ftpState->request->urlpath.rpos('/'); - filename = t ? t + 1 : ftpState->request->urlpath.buf(); + filename = t ? t + 1 : ftpState->request->urlpath.c_str(); mode = mimeGetTransferMode(filename); } @@ -1983,7 +1983,7 @@ debugs(9, 3, "This is ftpReadType"); if (code == 200) { - p = path = xstrdup(ftpState->request->urlpath.buf()); + p = path = xstrdup(ftpState->request->urlpath.c_str()); if (*p == '/') p++; @@ -2204,7 +2204,7 @@ if (ftpState->size == 0) { debugs(9, 2, "ftpReadSize: SIZE reported " << ftpState->ctrl.last_reply << " on " << - ftpState->title_url.buf()); + ftpState->title_url); ftpState->size = -1; } @@ -2910,7 +2910,7 @@ safe_free(ftpState->filepath); /* Build the new path (urlpath begins with /) */ - path = xstrdup(ftpState->request->urlpath.buf()); + path = xstrdup(ftpState->request->urlpath.c_str()); rfc1738_unescape(path); @@ -2961,7 +2961,7 @@ if (!ftpState->flags.isdir && /* Not a directory */ !ftpState->flags.try_slash_hack && /* Not in slash hack */ ftpState->mdtm <= 0 && ftpState->size < 0 && /* Not known as a file */ - ftpState->request->urlpath.caseCmp("/%2f", 4) != 0) { /* No slash encoded */ + strncasecmp(ftpState->request->urlpath, "/%2f", 4) != 0) { /* No slash encoded */ switch (ftpState->state) { @@ -3120,7 +3120,7 @@ { const char *mime_type = NULL; const char *mime_enc = NULL; - String urlpath = request->urlpath; + string urlpath = request->urlpath; const char *filename = NULL; const char *t = NULL; StoreEntry *e = entry; @@ -3141,7 +3141,7 @@ e->buffer(); /* released when done processing current data payload */ - filename = (t = urlpath.rpos('/')) ? t + 1 : urlpath.buf(); + filename = (t = urlpath.rpos('/')) ? t + 1 : urlpath.c_str(); if (flags.isdir) { mime_type = "text/html"; @@ -3274,7 +3274,7 @@ request->host, portbuf, "/%2f", - request->urlpath.buf()); + request->urlpath.c_str()); if ((t = strchr(buf, '?'))) *t = '\0'; Index: squid3/src/gopher.cc diff -u squid3/src/gopher.cc:1.27 squid3/src/gopher.cc:1.23.4.4 --- squid3/src/gopher.cc:1.27 Mon Apr 30 10:51:36 2007 +++ squid3/src/gopher.cc Thu May 3 03:05:12 2007 @@ -230,7 +230,7 @@ static void gopher_request_parse(const HttpRequest * req, char *type_id, char *request) { - const char *path = req->urlpath.buf(); + const char *path = req->urlpath.c_str(); if (request) request[0] = '\0'; @@ -377,7 +377,7 @@ } inbuf[len] = '\0'; - String outbuf; + string outbuf; if (!gopherState->HTML_header_added) { if (gopherState->conversion == gopher_ds::HTML_CSO_RESULT) @@ -691,12 +691,12 @@ } /* while loop */ if (outbuf.size() > 0) { - entry->append(outbuf.buf(), outbuf.size()); + entry->append(outbuf.c_str(), outbuf.size()); /* now let start sending stuff to client */ entry->flush(); } - outbuf.clean(); + outbuf.clear(); return; } Index: squid3/src/http.cc diff -u squid3/src/http.cc:1.105 squid3/src/http.cc:1.99.2.6 --- squid3/src/http.cc:1.105 Fri May 4 17:50:38 2007 +++ squid3/src/http.cc Sat May 5 07:37:31 2007 @@ -68,7 +68,7 @@ static PF httpStateFree; static PF httpTimeout; static void httpMaybeRemovePublic(StoreEntry *, http_status); -static void copyOneHeaderFromClientsideRequestToUpstreamRequest(const HttpHeaderEntry *e, String strConnection, HttpRequest * request, HttpRequest * orig_request, +static void copyOneHeaderFromClientsideRequestToUpstreamRequest(const HttpHeaderEntry *e, string strConnection, HttpRequest * request, HttpRequest * orig_request, HttpHeader * hdr_out, int we_do_ranges, http_state_flags); #if ICAP_CLIENT static void icapAclCheckDoneWrapper(ICAPServiceRep::Pointer service, void *data); @@ -92,7 +92,7 @@ const char *url; if (_peer->options.originserver) - url = orig_request->urlpath.buf(); + url = orig_request->urlpath.c_str(); else url = entry->url(); @@ -430,9 +430,9 @@ /* Pragma: no-cache in _replies_ is not documented in HTTP, * but servers like "Active Imaging Webcast/2.0" sure do use it */ if (hdr->has(HDR_PRAGMA)) { - String s = hdr->getList(HDR_PRAGMA); + string s = hdr->getList(HDR_PRAGMA); const int no_cache = strListIsMember(&s, "no-cache", ','); - s.clean(); + s.clear(); if (no_cache) { if (!REFRESH_OVERRIDE(ignore_no_cache)) @@ -583,14 +583,14 @@ const char * httpMakeVaryMark(HttpRequest * request, HttpReply const * reply) { - String vary, hdr; + string vary, hdr; const char *pos = NULL; const char *item; const char *value; int ilen; - static String vstr; + static string vstr; - vstr.clean(); + vstr.clear(); vary = reply->header.getList(HDR_VARY); while (strListGetItem(&vary, ',', &item, &ilen, &pos)) { @@ -601,14 +601,14 @@ if (strcmp(name, "*") == 0) { /* Can not handle "Vary: *" withtout ETag support */ safe_free(name); - vstr.clean(); + vstr.clear(); break; } strListAdd(&vstr, name, ','); hdr = request->header.getByName(name); safe_free(name); - value = hdr.buf(); + value = hdr.c_str(); if (value) { value = rfc1738_escape_part(value); @@ -617,10 +617,10 @@ vstr.append("\"", 1); } - hdr.clean(); + hdr.clear(); } - vary.clean(); + vary.clear(); #if X_ACCELERATOR_VARY pos = NULL; @@ -633,7 +633,7 @@ strListAdd(&vstr, name, ','); hdr = request->header.getByName(name); safe_free(name); - value = hdr.buf(); + value = hdr.c_str(); if (value) { value = rfc1738_escape_part(value); @@ -642,14 +642,14 @@ vstr.append("\"", 1); } - hdr.clean(); + hdr.clear(); } - vary.clean(); + vary.clear(); #endif - debugs(11, 3, "httpMakeVaryMark: " << vstr.buf()); - return vstr.buf(); + debugs(11, 3, "httpMakeVaryMark: " << vstr); + return vstr.c_str(); } void @@ -1361,7 +1361,7 @@ LOCAL_ARRAY(char, bbuf, BBUF_SZ); const HttpHeader *hdr_in = &orig_request->header; const HttpHeaderEntry *e; - String strFwd; + string strFwd; HttpHeaderPos pos = HttpHeaderInitPos; assert (hdr_out->owner == hoRequest); /* append our IMS header */ @@ -1371,7 +1371,7 @@ bool we_do_ranges = decideIfWeDoRanges (orig_request); - String strConnection (hdr_in->getList(HDR_CONNECTION)); + string strConnection (hdr_in->getList(HDR_CONNECTION)); while ((e = hdr_in->getEntry(&pos))) copyOneHeaderFromClientsideRequestToUpstreamRequest(e, strConnection, request, orig_request, hdr_out, we_do_ranges, flags); @@ -1390,24 +1390,24 @@ /* append Via */ if (Config.onoff.via) { - String strVia; + string strVia; strVia = hdr_in->getList(HDR_VIA); snprintf(bbuf, BBUF_SZ, "%d.%d %s", orig_request->http_ver.major, orig_request->http_ver.minor, ThisCache); strListAdd(&strVia, bbuf, ','); - hdr_out->putStr(HDR_VIA, strVia.buf()); - strVia.clean(); + hdr_out->putStr(HDR_VIA, strVia.c_str()); + strVia.clear(); } #if ESI { /* Append Surrogate-Capabilities */ - String strSurrogate (hdr_in->getList(HDR_SURROGATE_CAPABILITY)); + string strSurrogate (hdr_in->getList(HDR_SURROGATE_CAPABILITY)); snprintf(bbuf, BBUF_SZ, "%s=\"Surrogate/1.0 ESI/1.0\"", Config.Accel.surrogate_id); strListAdd(&strSurrogate, bbuf, ','); - hdr_out->putStr(HDR_SURROGATE_CAPABILITY, strSurrogate.buf()); + hdr_out->putStr(HDR_SURROGATE_CAPABILITY, strSurrogate.c_str()); } #endif @@ -1419,9 +1419,9 @@ else strListAdd(&strFwd, "unknown", ','); - hdr_out->putStr(HDR_X_FORWARDED_FOR, strFwd.buf()); + hdr_out->putStr(HDR_X_FORWARDED_FOR, strFwd.c_str()); - strFwd.clean(); + strFwd.clear(); /* append Host if not there already */ if (!hdr_out->has(HDR_HOST)) { @@ -1455,7 +1455,7 @@ if (orig_request->auth_user_request) username = orig_request->auth_user_request->username(); else if (orig_request->extacl_user.size()) - username = orig_request->extacl_user.buf(); + username = orig_request->extacl_user.c_str(); snprintf(loginbuf, sizeof(loginbuf), "%s%s", username, orig_request->peer_login + 1); @@ -1464,7 +1464,7 @@ } else if (strcmp(orig_request->peer_login, "PASS") == 0) { if (orig_request->extacl_user.size() && orig_request->extacl_passwd.size()) { char loginbuf[256]; - snprintf(loginbuf, sizeof(loginbuf), "%s:%s", orig_request->extacl_user.buf(), orig_request->extacl_passwd.buf()); + snprintf(loginbuf, sizeof(loginbuf), "%s:%s", orig_request->extacl_user.c_str(), orig_request->extacl_passwd.c_str()); httpHeaderPutStrf(hdr_out, HDR_PROXY_AUTHORIZATION, "Basic %s", base64_encode(loginbuf)); } @@ -1491,7 +1491,7 @@ hdr_out->putStr(HDR_AUTHORIZATION, auth); } else if (orig_request->extacl_user.size() && orig_request->extacl_passwd.size()) { char loginbuf[256]; - snprintf(loginbuf, sizeof(loginbuf), "%s:%s", orig_request->extacl_user.buf(), orig_request->extacl_passwd.buf()); + snprintf(loginbuf, sizeof(loginbuf), "%s:%s", orig_request->extacl_user.c_str(), orig_request->extacl_passwd.c_str()); httpHeaderPutStrf(hdr_out, HDR_AUTHORIZATION, "Basic %s", base64_encode(loginbuf)); } @@ -1503,7 +1503,7 @@ if (orig_request->auth_user_request) username = orig_request->auth_user_request->username(); else if (orig_request->extacl_user.size()) - username = orig_request->extacl_user.buf(); + username = orig_request->extacl_user.c_str(); snprintf(loginbuf, sizeof(loginbuf), "%s%s", username, orig_request->peer_login + 1); @@ -1528,7 +1528,7 @@ httpHdrCcSetMaxAge(cc, getMaxAge(url)); if (request->urlpath.size()) - assert(strstr(url, request->urlpath.buf())); + assert(strstr(url, request->urlpath.c_str())); } /* Set no-cache if determined needed but not found */ @@ -1563,16 +1563,16 @@ if (Config2.onoff.mangle_request_headers) httpHdrMangleList(hdr_out, request, ROR_REQUEST); - strConnection.clean(); + strConnection.clear(); } void -copyOneHeaderFromClientsideRequestToUpstreamRequest(const HttpHeaderEntry *e, String strConnection, HttpRequest * request, HttpRequest * orig_request, HttpHeader * hdr_out, int we_do_ranges, http_state_flags flags) +copyOneHeaderFromClientsideRequestToUpstreamRequest(const HttpHeaderEntry *e, string strConnection, HttpRequest * request, HttpRequest * orig_request, HttpHeader * hdr_out, int we_do_ranges, http_state_flags flags) { - debugs(11, 5, "httpBuildRequestHeader: " << e->name.buf() << ": " << e->value.buf()); + debugs(11, 5, "httpBuildRequestHeader: " << e->name << ": " << e->value); if (!httpRequestHdrAllowed(e, &strConnection)) { - debugs(11, 2, "'" << e->name.buf() << "' header denied by anonymize_headers configuration"); + debugs(11, 2, "'" << e->name << "' header denied by anonymize_headers configuration"); return; } @@ -1731,7 +1731,7 @@ HttpVersion httpver(1, 0); mb->Printf("%s %s HTTP/%d.%d\r\n", RequestMethodStr[request->method], - request->urlpath.size() ? request->urlpath.buf() : "/", + request->urlpath.size() ? request->urlpath.c_str() : "/", httpver.major,httpver.minor); /* build and pack headers */ { Index: squid3/src/ident.cc diff -u squid3/src/ident.cc:1.16 squid3/src/ident.cc:1.15.4.2 --- squid3/src/ident.cc:1.16 Sat Apr 28 15:51:53 2007 +++ squid3/src/ident.cc Thu May 3 06:37:06 2007 @@ -270,7 +270,7 @@ void identInit(void) { - ident_hash = hash_create((HASHCMP *) strcmp, + ident_hash = hash_create((HASHCMP *) std::strcmp, hashPrime(Squid_MaxFD / 8), hash4); } Index: squid3/src/internal.cc diff -u squid3/src/internal.cc:1.17 squid3/src/internal.cc:1.15.8.3 --- squid3/src/internal.cc:1.17 Sat Apr 28 15:51:53 2007 +++ squid3/src/internal.cc Tue May 1 17:09:51 2007 @@ -50,7 +50,7 @@ internalStart(HttpRequest * request, StoreEntry * entry) { ErrorState *err; - const char *upath = request->urlpath.buf(); + const char *upath = request->urlpath.c_str(); debugs(76, 3, "internalStart: " << inet_ntoa(request->client_addr) << " requesting '" << upath << "'"); if (0 == strcmp(upath, "/squid-internal-dynamic/netdb")) { Index: squid3/src/ipcache.cc diff -u squid3/src/ipcache.cc:1.20 squid3/src/ipcache.cc:1.19.8.2 --- squid3/src/ipcache.cc:1.20 Sat Apr 28 15:51:53 2007 +++ squid3/src/ipcache.cc Thu May 3 06:37:06 2007 @@ -586,7 +586,7 @@ ipcache_low = (long) (((float) Config.ipcache.size * (float) Config.ipcache.low) / (float) 100); n = hashPrime(ipcache_high / 4); - ip_table = hash_create((HASHCMP *) strcmp, n, hash4); + ip_table = hash_create((HASHCMP *) std::strcmp, n, hash4); memDataInit(MEM_IPCACHE_ENTRY, "ipcache_entry", sizeof(ipcache_entry), 0); } Index: squid3/src/pconn.cc diff -u squid3/src/pconn.cc:1.16 squid3/src/pconn.cc:1.14.2.2 --- squid3/src/pconn.cc:1.16 Mon Apr 30 10:51:40 2007 +++ squid3/src/pconn.cc Thu May 3 06:37:06 2007 @@ -217,7 +217,7 @@ PconnPool::PconnPool(const char *aDescr) : table(NULL), descr(aDescr) { int i; - table = hash_create((HASHCMP *) strcmp, 229, hash_string); + table = hash_create((HASHCMP *) std::strcmp, 229, hash_string); for (i = 0; i < PCONN_HIST_SZ; i++) hist[i] = 0; Index: squid3/src/peer_digest.cc diff -u squid3/src/peer_digest.cc:1.31 squid3/src/peer_digest.cc:1.27.4.3 --- squid3/src/peer_digest.cc:1.31 Mon Apr 30 10:51:40 2007 +++ squid3/src/peer_digest.cc Thu May 3 08:03:35 2007 @@ -112,7 +112,7 @@ if (pd->cd) cacheDigestDestroy(pd->cd); - pd->host.clean(); + pd->host.clear(); } CBDATA_CLASS_INIT(PeerDigest); @@ -231,7 +231,7 @@ { eventAdd("peerDigestCheck", peerDigestCheck, pd, (double) delay, 1); pd->times.next_check = squid_curtime + delay; - debugs(72, 3, "peerDigestSetCheck: will check peer " << pd->host.buf() << " in " << delay << " secs"); + debugs(72, 3, "peerDigestSetCheck: will check peer " << pd->host << " in " << delay << " secs"); } /* @@ -241,10 +241,10 @@ peerDigestNotePeerGone(PeerDigest * pd) { if (pd->flags.requested) { - debugs(72, 2, "peerDigest: peer " << pd->host.buf() << " gone, will destroy after fetch."); + debugs(72, 2, "peerDigest: peer " << pd->host << " gone, will destroy after fetch."); /* do nothing now, the fetching chain will notice and take action */ } else { - debugs(72, 2, "peerDigest: peer " << pd->host.buf() << " is gone, destroying now."); + debugs(72, 2, "peerDigest: peer " << pd->host << " is gone, destroying now."); peerDigestDestroy(pd); } } @@ -279,7 +279,7 @@ /* per-peer limit */ if (req_time - pd->times.received < PeerDigestReqMinGap) { - debugs(72, 2, "peerDigestCheck: " << pd->host.buf() << + debugs(72, 2, "peerDigestCheck: " << pd->host << ", avoiding close peer requests (" << (int) (req_time - pd->times.received) << " < " << (int) PeerDigestReqMinGap << " secs)."); @@ -289,7 +289,7 @@ /* global limit */ if (req_time - pd_last_req_time < GlobDigestReqMinGap) { - debugs(72, 2, "peerDigestCheck: " << pd->host.buf() << + debugs(72, 2, "peerDigestCheck: " << pd->host << ", avoiding close requests (" << (int) (req_time - pd_last_req_time) << " < " << (int) GlobDigestReqMinGap << " secs)."); @@ -546,7 +546,7 @@ assert(reply); assert (reply->sline.status != 0); status = reply->sline.status; - debugs(72, 3, "peerDigestFetchReply: " << pd->host.buf() << " status: " << status << + debugs(72, 3, "peerDigestFetchReply: " << pd->host << " status: " << status << ", expires: " << (long int) reply->expires << " (" << std::showpos << (int) (reply->expires - squid_curtime) << ")"); @@ -636,7 +636,7 @@ assert (fetch->entry->getReply()->sline.status != 0); if (fetch->entry->getReply()->sline.status != HTTP_OK) { - debugs(72, 1, "peerDigestSwapInHeaders: " << fetch->pd->host.buf() << + debugs(72, 1, "peerDigestSwapInHeaders: " << fetch->pd->host << " status " << fetch->entry->getReply()->sline.status << " got cached!"); @@ -764,7 +764,7 @@ #endif else - host = pd->host.buf(); + host = pd->host.c_str(); } debugs(72, 6, step_name << ": peer " << host << ", offset: " << @@ -815,7 +815,7 @@ peerDigestFetchStop(DigestFetchState * fetch, char *buf, const char *reason) { assert(reason); - debugs(72, 2, "peerDigestFetchStop: peer " << fetch->pd->host.buf() << ", reason: " << reason); + debugs(72, 2, "peerDigestFetchStop: peer " << fetch->pd->host << ", reason: " << reason); peerDigestReqFinish(fetch, buf, 1, 1, 1, reason, 0); } @@ -824,7 +824,7 @@ peerDigestFetchAbort(DigestFetchState * fetch, char *buf, const char *reason) { assert(reason); - debugs(72, 2, "peerDigestFetchAbort: peer " << fetch->pd->host.buf() << ", reason: " << reason); + debugs(72, 2, "peerDigestFetchAbort: peer " << fetch->pd->host << ", reason: " << reason); peerDigestReqFinish(fetch, buf, 1, 1, 1, reason, 1); } @@ -874,7 +874,7 @@ peerDigestPDFinish(DigestFetchState * fetch, int pcb_valid, int err) { PeerDigest *pd = fetch->pd; - const char *host = pd->host.buf(); + const char *host = pd->host.c_str(); pd->times.received = squid_curtime; pd->times.req_delay = fetch->resp_time; @@ -988,7 +988,7 @@ { StoreDigestCBlock cblock; int freed_size = 0; - const char *host = pd->host.buf(); + const char *host = pd->host.c_str(); xmemcpy(&cblock, buf, sizeof(cblock)); /* network -> host conversions */ @@ -1082,7 +1082,7 @@ const int bit_util = cacheDigestBitUtil(pd->cd); if (bit_util > 65) { - debugs(72, 0, "Warning: " << pd->host.buf() << + debugs(72, 0, "Warning: " << pd->host << " peer digest has too many bits on (" << bit_util << "%%)."); return 0; @@ -1108,7 +1108,7 @@ assert(pd); - const char *host = pd->host.buf(); + const char *host = pd->host.c_str(); storeAppendPrintf(e, "\npeer digest from %s\n", host); cacheDigestGuessStatsReport(&pd->stats.guess, e, host); Index: squid3/src/protos.h diff -u squid3/src/protos.h:1.82 squid3/src/protos.h:1.80.2.3 --- squid3/src/protos.h:1.82 Fri Apr 20 17:16:10 2007 +++ squid3/src/protos.h Wed May 2 05:53:05 2007 @@ -222,7 +222,7 @@ SQUIDCEXTERN void httpHdrCcInitModule(void); SQUIDCEXTERN void httpHdrCcCleanModule(void); SQUIDCEXTERN HttpHdrCc *httpHdrCcCreate(void); -SQUIDCEXTERN HttpHdrCc *httpHdrCcParseCreate(const String * str); +SQUIDCEXTERN HttpHdrCc *httpHdrCcParseCreate(const string * str); SQUIDCEXTERN void httpHdrCcDestroy(HttpHdrCc * cc); SQUIDCEXTERN HttpHdrCc *httpHdrCcDup(const HttpHdrCc * cc); SQUIDCEXTERN void httpHdrCcPackInto(const HttpHdrCc * cc, Packer * p); @@ -234,14 +234,14 @@ /* Http Header Tools */ SQUIDCEXTERN HttpHeaderFieldInfo *httpHeaderBuildFieldsInfo(const HttpHeaderFieldAttrs * attrs, int count); SQUIDCEXTERN void httpHeaderDestroyFieldsInfo(HttpHeaderFieldInfo * info, int count); -SQUIDCEXTERN http_hdr_type httpHeaderIdByName(const char *name, int name_len, const HttpHeaderFieldInfo * attrs, int end); +SQUIDCEXTERN http_hdr_type httpHeaderIdByName(const char *name, unsigned int name_len, const HttpHeaderFieldInfo * attrs, int end); SQUIDCEXTERN http_hdr_type httpHeaderIdByNameDef(const char *name, int name_len); SQUIDCEXTERN const char *httpHeaderNameById(int id); SQUIDCEXTERN int httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive); -SQUIDCEXTERN void strListAdd(String * str, const char *item, char del); -SQUIDCEXTERN int strListIsMember(const String * str, const char *item, char del); -SQUIDCEXTERN int strListIsSubstr(const String * list, const char *s, char del); -SQUIDCEXTERN int strListGetItem(const String * str, char del, const char **item, int *ilen, const char **pos); +SQUIDCEXTERN void strListAdd(string * str, const char *item, char del); +SQUIDCEXTERN int strListIsMember(const string * str, const char *item, char del); +SQUIDCEXTERN int strListIsSubstr(const string * list, const char *s, char del); +SQUIDCEXTERN int strListGetItem(const string * str, char del, const char **item, int *ilen, const char **pos); SQUIDCEXTERN const char *getStringPrefix(const char *str, const char *end); SQUIDCEXTERN int httpHeaderParseInt(const char *start, int *val); SQUIDCEXTERN int httpHeaderParseSize(const char *start, ssize_t * sz); Index: squid3/src/redirect.cc diff -u squid3/src/redirect.cc:1.23 squid3/src/redirect.cc:1.21.8.4 --- squid3/src/redirect.cc:1.23 Sat Apr 28 15:51:56 2007 +++ squid3/src/redirect.cc Thu May 3 03:05:13 2007 @@ -136,8 +136,8 @@ if (http->request->auth_user_request) r->client_ident = http->request->auth_user_request->username(); - else if (http->request->extacl_user.buf() != NULL) { - r->client_ident = http->request->extacl_user.buf(); + else if (!http->request->extacl_user.empty()) { + r->client_ident = http->request->extacl_user.c_str(); } if (!r->client_ident && (conn != NULL && conn->rfc931[0])) Index: squid3/src/stat.cc diff -u squid3/src/stat.cc:1.39 squid3/src/stat.cc:1.36.2.4 --- squid3/src/stat.cc:1.39 Sat Apr 28 15:51:56 2007 +++ squid3/src/stat.cc Thu May 3 03:05:13 2007 @@ -1692,8 +1692,8 @@ if (http->request->auth_user_request) p = http->request->auth_user_request->username(); - else if (http->request->extacl_user.buf() != NULL) { - p = http->request->extacl_user.buf(); + else if (!http->request->extacl_user.empty()) { + p = http->request->extacl_user.c_str(); } if (!p && (conn != NULL && conn->rfc931[0])) Index: squid3/src/store.cc diff -u squid3/src/store.cc:1.59 squid3/src/store.cc:1.51.4.5 --- squid3/src/store.cc:1.59 Mon Apr 30 10:51:40 2007 +++ squid3/src/store.cc Mon May 7 03:32:22 2007 @@ -685,7 +685,7 @@ if (mem_obj->vary_headers && !storeGetPublic(mem_obj->url, mem_obj->method)) { /* Create "vary" base object */ - String vary; + string vary; StoreEntry *pe = storeCreateEntry(mem_obj->url, mem_obj->log_url, request->flags, request->method); HttpVersion version(1, 0); /* We are allowed to do this typecast */ @@ -693,19 +693,19 @@ rep->setHeaders(version, HTTP_OK, "Internal marker object", "x-squid-internal/vary", -1, -1, squid_curtime + 100000); vary = mem_obj->getReply()->header.getList(HDR_VARY); - if (vary.size()) { + if (!vary.empty()) { /* Again, we own this structure layout */ - rep->header.putStr(HDR_VARY, vary.buf()); - vary.clean(); + rep->header.putStr(HDR_VARY, vary.c_str()); + vary.clear(); } #if X_ACCELERATOR_VARY vary = mem_obj->getReply()->header.getList(HDR_X_ACCELERATOR_VARY); - if (vary.buf()) { + if (!vary.empty()) { /* Again, we own this structure layout */ - rep->header.putStr(HDR_X_ACCELERATOR_VARY, vary.buf()); - vary.clean(); + rep->header.putStr(HDR_X_ACCELERATOR_VARY, vary.c_str()); + vary.clear(); } #endif Index: squid3/src/store_dir.cc diff -u squid3/src/store_dir.cc:1.22 squid3/src/store_dir.cc:1.20.4.3 --- squid3/src/store_dir.cc:1.22 Sat Apr 28 15:51:56 2007 +++ squid3/src/store_dir.cc Tue May 1 17:09:51 2007 @@ -502,7 +502,7 @@ } StoreSearch * -StoreController::search(String const url, HttpRequest *request) +StoreController::search(string const url, HttpRequest *request) { /* cheat, for now you can't search the memory hot cache */ return swapDir->search(url, request); @@ -700,7 +700,7 @@ void StoreController::get - (String const key, STOREGETCLIENT callback, void *cbdata) + (string const key, STOREGETCLIENT callback, void *cbdata) { fatal("not implemented"); } @@ -775,7 +775,7 @@ void StoreHashIndex::get - (String const key, STOREGETCLIENT callback, void *cbdata) + (string const key, STOREGETCLIENT callback, void *cbdata) { fatal("not implemented"); } @@ -891,7 +891,7 @@ } StoreSearch * -StoreHashIndex::search(String const url, HttpRequest *) +StoreHashIndex::search(string const url, HttpRequest *) { if (url.size()) fatal ("Cannot search by url yet\n"); Index: squid3/src/store_log.cc diff -u squid3/src/store_log.cc:1.9 squid3/src/store_log.cc:1.6.2.4 --- squid3/src/store_log.cc:1.9 Sat Apr 28 15:51:56 2007 +++ squid3/src/store_log.cc Mon May 7 03:32:22 2007 @@ -87,7 +87,7 @@ (int) reply->date, (int) reply->last_modified, (int) reply->expires, - reply->content_type.size() ? reply->content_type.buf() : "unknown", + !reply->content_type.empty() ? reply->content_type.c_str() : "unknown", reply->content_length, e->contentLen(), RequestMethodStr[mem->method], Index: squid3/src/structs.h diff -u squid3/src/structs.h:1.106 squid3/src/structs.h:1.105.2.3 --- squid3/src/structs.h:1.106 Mon Apr 16 11:05:01 2007 +++ squid3/src/structs.h Thu May 3 03:05:13 2007 @@ -842,8 +842,8 @@ class HttpHdrExtField { - String name; /* field-name from HTTP/1.1 (no column after name) */ - String value; /* field-value from HTTP/1.1 */ + string name; /* field-name from HTTP/1.1 (no column after name) */ + string value; /* field-value from HTTP/1.1 */ }; /* http cache control header field */ @@ -856,7 +856,7 @@ int max_age; int s_maxage; int max_stale; - String other; + string other; }; /* some fields can hold either time or etag specs (e.g. If-Range) */ @@ -892,7 +892,7 @@ HttpHeaderFieldInfo() : id (HDR_ACCEPT), type (ftInvalid){} http_hdr_type id; - String name; + string name; field_type type; HttpHeaderFieldStat stat; }; Index: squid3/src/url.cc diff -u squid3/src/url.cc:1.18 squid3/src/url.cc:1.17.4.3 --- squid3/src/url.cc:1.18 Sat Apr 28 15:51:56 2007 +++ squid3/src/url.cc Tue May 1 17:09:51 2007 @@ -268,7 +268,7 @@ for (t = host; *t; t++) *t = xtolower(*t); - if (stringHasWhitespace(host)) { + if (strpbrk(host, w_space) != NULL) { if (URI_WHITESPACE_STRIP == Config.uri_whitespace) { t = q = host; @@ -316,7 +316,7 @@ } #endif - if (stringHasWhitespace(urlpath)) { + if (strpbrk(urlpath, w_space) != NULL) { debugs(23, 2, "urlParse: URI has whitespace: {" << url << "}"); switch (Config.uri_whitespace) { @@ -381,7 +381,7 @@ return request->canonical; if (request->protocol == PROTO_URN) { - snprintf(urlbuf, MAX_URL, "urn:%s", request->urlpath.buf()); + snprintf(urlbuf, MAX_URL, "urn:%s", request->urlpath.c_str()); } else { switch (request->method) { @@ -401,7 +401,7 @@ *request->login ? "@" : null_string, request->host, portbuf, - request->urlpath.buf()); + request->urlpath.c_str()); break; } @@ -410,6 +410,22 @@ return (request->canonical = xstrdup(urlbuf)); } +int +stringHasCntl(const char *s) +{ + unsigned char c; + + while ((c = (unsigned char) *s++) != '\0') { + if (c <= 0x1f) + return 1; + + if (c >= 0x7f && c <= 0x9f) + return 1; + } + + return 0; +} + char * urlCanonicalClean(const HttpRequest * request) { @@ -419,7 +435,7 @@ char *t; if (request->protocol == PROTO_URN) { - snprintf(buf, MAX_URL, "urn:%s", request->urlpath.buf()); + snprintf(buf, MAX_URL, "urn:%s", request->urlpath.c_str()); } else { switch (request->method) { @@ -449,7 +465,7 @@ loginbuf, request->host, portbuf, - request->urlpath.buf()); + request->urlpath.c_str()); /* * strip arguments AFTER a question-mark */ Index: squid3/src/urn.cc diff -u squid3/src/urn.cc:1.27 squid3/src/urn.cc:1.25.8.4 --- squid3/src/urn.cc:1.27 Sat Apr 28 15:51:56 2007 +++ squid3/src/urn.cc Thu May 3 03:05:14 2007 @@ -53,11 +53,11 @@ void *operator new (size_t byteCount); void operator delete (void *address); void start (HttpRequest *, StoreEntry *); - char *getHost (String &urlpath); + char *getHost (string &urlpath); void setUriResFromRequest(HttpRequest *); bool RequestNeedsMenu(HttpRequest *r); void updateRequestURL(HttpRequest *r, char const *newPath); - void createUriResRequest (String &uri); + void createUriResRequest (string &uri); virtual ~UrnState(); @@ -174,17 +174,17 @@ } char * -UrnState::getHost (String &urlpath) +UrnState::getHost (string &urlpath) { char * result; char const *t; if ((t = urlpath.pos(':')) != NULL) { urlpath.set(t, '\0'); - result = xstrdup(urlpath.buf()); + result = xstrdup(urlpath.c_str()); urlpath.set(t, ':'); } else { - result = xstrdup(urlpath.buf()); + result = xstrdup(urlpath.c_str()); } return result; @@ -193,7 +193,7 @@ bool UrnState::RequestNeedsMenu(HttpRequest *r) { - return strncasecmp(r->urlpath.buf(), "menu.", 5) == 0; + return strncasecmp(r->urlpath, "menu.", 5) == 0; } void @@ -205,11 +205,11 @@ } void -UrnState::createUriResRequest (String &uri) +UrnState::createUriResRequest (string &uri) { LOCAL_ARRAY(char, local_urlres, 4096); char *host = getHost (uri); - snprintf(local_urlres, 4096, "http://%s/uri-res/N2L?urn:%s", host, uri.buf()); + snprintf(local_urlres, 4096, "http://%s/uri-res/N2L?urn:%s", host, uri.c_str()); safe_free (host); safe_free (urlres); urlres = xstrdup (local_urlres); @@ -220,7 +220,7 @@ UrnState::setUriResFromRequest(HttpRequest *r) { if (RequestNeedsMenu(r)) { - updateRequestURL(r, r->urlpath.buf() + 5); + updateRequestURL(r, r->urlpath.c_str() + 5); flags.force_menu = 1; } Index: squid3/src/whois.cc diff -u squid3/src/whois.cc:1.22 squid3/src/whois.cc:1.17.4.3 --- squid3/src/whois.cc:1.22 Mon Apr 30 10:51:41 2007 +++ squid3/src/whois.cc Tue May 1 17:09:52 2007 @@ -100,7 +100,7 @@ buf = (char *)xmalloc(l); - snprintf(buf, l, "%s\r\n", p->request->urlpath.buf() + 1); + snprintf(buf, l, "%s\r\n", p->request->urlpath.c_str() + 1); comm_write(fd, buf, strlen(buf), whoisWriteComplete, p, NULL); comm_read(fd, p->buf, BUFSIZ, whoisReadReply, p); Index: squid3/src/DiskIO/AIO/AIODiskFile.h diff -u squid3/src/DiskIO/AIO/AIODiskFile.h:1.2 squid3/src/DiskIO/AIO/AIODiskFile.h:1.2.8.1 --- squid3/src/DiskIO/AIO/AIODiskFile.h:1.2 Sun Aug 20 18:51:50 2006 +++ squid3/src/DiskIO/AIO/AIODiskFile.h Thu May 3 06:37:07 2007 @@ -70,7 +70,7 @@ CBDATA_CLASS(AIODiskFile); void error(bool const &); int fd; - String path; + string path; AIODiskIOStrategy *strategy; RefCount ioRequestor; bool closed; Index: squid3/src/ICAP/ICAPConfig.cc diff -u squid3/src/ICAP/ICAPConfig.cc:1.13 squid3/src/ICAP/ICAPConfig.cc:1.12.4.3 --- squid3/src/ICAP/ICAPConfig.cc:1.13 Sat Apr 28 15:51:58 2007 +++ squid3/src/ICAP/ICAPConfig.cc Thu May 3 08:03:35 2007 @@ -48,7 +48,7 @@ ICAPConfig TheICAPConfig; ICAPServiceRep::Pointer -ICAPConfig::findService(const String& key) +ICAPConfig::findService(const string& key) { Vector::iterator iter = services.begin(); @@ -63,7 +63,7 @@ } ICAPClass * -ICAPConfig::findClass(const String& key) +ICAPConfig::findClass(const string& key) { if (!key.size()) return NULL; @@ -87,7 +87,7 @@ wordlist *service_names = NULL; wordlist *iter; - ConfigParser::ParseString(&key); + ConfigParser::ParseString(key); ConfigParser::ParseWordList(&service_names); for (iter = service_names; iter; iter = iter->next) { @@ -125,7 +125,7 @@ candidateClasses.clean(); - matchedClass.clean(); + matchedClass.clear(); acl_checklist = NULL; @@ -159,7 +159,7 @@ ICAPClass *c = *ci; ICAPServiceRep::Pointer service = findBestService(c, false); if (service != NULL) { - debugs(93, 3, "ICAPAccessCheck::check: class '" << c->key.buf() << "' has candidate service '" << service->key.buf() << "'"); + debugs(93, 3, "ICAPAccessCheck::check: class '" << c->key << "' has candidate service '" << service->key << "'"); candidateClasses += c->key; } } @@ -193,7 +193,7 @@ */ debugs(93, 3, "ICAPAccessCheck::check: NO candidates or matches found"); - matchedClass.clean(); + matchedClass.clear(); ICAPAccessCheckCallbackWrapper(1, this); @@ -207,7 +207,7 @@ ICAPAccessCheck *ac = (ICAPAccessCheck*)data; if (ac->matchedClass.size()) { - debugs(93, 5, "ICAPAccessCheckCallbackWrapper matchedClass = " << ac->matchedClass.buf()); + debugs(93, 5, "ICAPAccessCheckCallbackWrapper matchedClass = " << ac->matchedClass); } if (!answer) { @@ -241,7 +241,7 @@ debugs(93, 3, "ICAPAccessCheck::do_callback"); if (matchedClass.size()) { - debugs(93, 3, "ICAPAccessCheck::do_callback matchedClass = " << matchedClass.buf()); + debugs(93, 3, "ICAPAccessCheck::do_callback matchedClass = " << matchedClass); } void *validated_cbdata; @@ -351,8 +351,8 @@ for (VI i = services.begin(); i != services.end(); ++i) { const ICAPServiceRep::Pointer &r = *i; - storeAppendPrintf(entry, "%s %s_%s %s %d %s\n", name, r->key.buf(), - r->methodStr(), r->vectPointStr(), r->bypass, r->uri.buf()); + storeAppendPrintf(entry, "%s %s_%s %s %d %s\n", name, r->key.c_str(), + r->methodStr(), r->vectPointStr(), r->bypass, r->uri.c_str()); } }; @@ -380,7 +380,7 @@ Vector::iterator i = classes.begin(); while (i != classes.end()) { - storeAppendPrintf(entry, "%s %s\n", name, (*i)->key.buf()); + storeAppendPrintf(entry, "%s %s\n", name, (*i)->key.c_str()); ++i; } }; @@ -388,13 +388,13 @@ void ICAPConfig::parseICAPAccess(ConfigParser &parser) { - String aKey; - ConfigParser::ParseString(&aKey); + string aKey; + ConfigParser::ParseString(aKey); ICAPClass *theClass = TheICAPConfig.findClass(aKey); if (theClass == NULL) fatalf("Did not find ICAP class '%s' referenced on line %d\n", - aKey.buf(), config_lineno); + aKey.c_str(), config_lineno); aclParseAccessLine(parser, &theClass->accessList); }; @@ -413,7 +413,7 @@ Vector::iterator i = classes.begin(); while (i != classes.end()) { - snprintf(nom, 64, "%s %s", name, (*i)->key.buf()); + snprintf(nom, 64, "%s %s", name, (*i)->key.c_str()); dump_acl_access(entry, nom, (*i)->accessList); ++i; } Index: squid3/src/ICAP/ICAPConfig.h diff -u squid3/src/ICAP/ICAPConfig.h:1.9 squid3/src/ICAP/ICAPConfig.h:1.9.4.1 --- squid3/src/ICAP/ICAPConfig.h:1.9 Thu Apr 5 22:52:42 2007 +++ squid3/src/ICAP/ICAPConfig.h Thu May 3 06:37:07 2007 @@ -47,7 +47,7 @@ { public: - String key; + string key; acl_access *accessList; Vector services; @@ -73,8 +73,8 @@ ICAPAccessCheckCallback *callback; void *callback_data; ACLChecklist *acl_checklist; - Vector candidateClasses; - String matchedClass; + Vector candidateClasses; + string matchedClass; void do_callback(); ICAPServiceRep::Pointer findBestService(ICAPClass *c, bool preferUp); @@ -115,8 +115,8 @@ void parseICAPService(void); void freeICAPService(void); void dumpICAPService(StoreEntry *, const char *); - ICAPServiceRep::Pointer findService(const String&); - ICAPClass * findClass(const String& key); + ICAPServiceRep::Pointer findService(const string&); + ICAPClass * findClass(const string& key); void parseICAPClass(void); void freeICAPClass(void); Index: squid3/src/ICAP/ICAPModXact.cc diff -u squid3/src/ICAP/ICAPModXact.cc:1.21 squid3/src/ICAP/ICAPModXact.cc:1.19.4.4 --- squid3/src/ICAP/ICAPModXact.cc:1.21 Sat Apr 28 15:51:58 2007 +++ squid3/src/ICAP/ICAPModXact.cc Thu May 3 08:03:36 2007 @@ -989,8 +989,8 @@ * XXX These should use HttpHdr interfaces instead of Printfs */ const ICAPServiceRep &s = service(); - buf.Printf("%s %s ICAP/1.0\r\n", s.methodStr(), s.uri.buf()); - buf.Printf("Host: %s:%d\r\n", s.host.buf(), s.port); + buf.Printf("%s %s ICAP/1.0\r\n", s.methodStr(), s.uri.c_str()); + buf.Printf("Host: %s:%d\r\n", s.host.c_str(), s.port); buf.Printf("Date: %s\r\n", mkrfc1123(squid_curtime)); if (!TheICAPConfig.reuse_connections) @@ -1011,7 +1011,7 @@ // to simplify, we could assume that request is always available - String urlPath; + string urlPath; if (request) { urlPath = request->urlpath; if (ICAP::methodRespmod == m) @@ -1097,7 +1097,7 @@ } // decides whether to offer a preview and calculates its size -bool ICAPModXact::shouldPreview(const String &urlPath) +bool ICAPModXact::shouldPreview(const string &urlPath) { if (!TheICAPConfig.preview_enable) { debugs(93, 5, HERE << "preview disabled by squid.conf"); Index: squid3/src/ICAP/ICAPModXact.h diff -u squid3/src/ICAP/ICAPModXact.h:1.6 squid3/src/ICAP/ICAPModXact.h:1.6.4.1 --- squid3/src/ICAP/ICAPModXact.h:1.6 Thu Apr 5 22:52:43 2007 +++ squid3/src/ICAP/ICAPModXact.h Thu May 3 08:03:36 2007 @@ -193,7 +193,7 @@ void virginConsume(); void finishNullOrEmptyBodyPreview(MemBuf &buf); - bool shouldPreview(const String &urlPath); + bool shouldPreview(const string &urlPath); bool shouldAllow204(); void prepBackup(size_t expectedSize); void backup(const MemBuf &buf); Index: squid3/src/ICAP/ICAPOptXact.cc diff -u squid3/src/ICAP/ICAPOptXact.cc:1.6 squid3/src/ICAP/ICAPOptXact.cc:1.5.4.2 --- squid3/src/ICAP/ICAPOptXact.cc:1.6 Wed Apr 25 04:51:03 2007 +++ squid3/src/ICAP/ICAPOptXact.cc Thu May 3 08:03:36 2007 @@ -57,8 +57,8 @@ void ICAPOptXact::makeRequest(MemBuf &buf) { const ICAPServiceRep &s = service(); - buf.Printf("OPTIONS %s ICAP/1.0\r\n", s.uri.buf()); - buf.Printf("Host: %s:%d\r\n", s.host.buf(), s.port); + buf.Printf("OPTIONS %s ICAP/1.0\r\n", s.uri.c_str()); + buf.Printf("Host: %s:%d\r\n", s.host.c_str(), s.port); buf.append(ICAP::crlf, 2); } Index: squid3/src/ICAP/ICAPOptions.cc diff -u squid3/src/ICAP/ICAPOptions.cc:1.9 squid3/src/ICAP/ICAPOptions.cc:1.9.4.2 --- squid3/src/ICAP/ICAPOptions.cc:1.9 Thu Apr 5 22:52:43 2007 +++ squid3/src/ICAP/ICAPOptions.cc Mon May 7 03:32:23 2007 @@ -31,7 +31,7 @@ // future optimization note: this method is called by ICAP ACL code at least // twice for each HTTP message to see if the message should be ignored. For any // non-ignored HTTP message, ICAP calls to check whether a preview is needed. -ICAPOptions::TransferKind ICAPOptions::transferKind(const String &urlPath) const +ICAPOptions::TransferKind ICAPOptions::transferKind(const string &urlPath) const { if (theTransfers.preview.matches(urlPath)) return xferPreview; @@ -122,10 +122,10 @@ // TODO: HttpHeader should provide a general method for this type of conversion void ICAPOptions::cfgIntHeader(const HttpHeader *h, const char *fname, int &value) { - const String s = h->getByName(fname); + const string s = h->getByName(fname); - if (s.size() && xisdigit(*s.buf())) - value = atoi(s.buf()); + if (!s.empty() && xisdigit(s[0])) + value = atoi(s.c_str()); else value = -1; @@ -134,7 +134,7 @@ void ICAPOptions::cfgTransferList(const HttpHeader *h, TransferList &list) { - const String buf = h->getByName(list.name); + const string buf = h->getByName(list.name); bool foundStar = false; list.parse(buf, foundStar); @@ -162,7 +162,7 @@ wordlistAdd(&extensions, extension); }; -bool ICAPOptions::TransferList::matches(const String &urlPath) const { +bool ICAPOptions::TransferList::matches(const string &urlPath) const { const int urlLen = urlPath.size(); for (wordlist *e = extensions; e; e = e->next) { // optimize: store extension lengths @@ -172,8 +172,8 @@ if (eLen < urlLen) { const int eOff = urlLen - eLen; // RFC 3507 examples imply that extensions come without leading '.' - if (urlPath.buf()[eOff-1] == '.' && - strcmp(urlPath.buf() + eOff, e->key) == 0) { + if (urlPath[eOff-1] == '.' && + strcmp(&urlPath[eOff], e->key) == 0) { debugs(93,7, "ICAPOptions url " << urlPath << " matches " << name << " extension " << e->key); return true; @@ -184,7 +184,7 @@ return false; } -void ICAPOptions::TransferList::parse(const String &buf, bool &foundStar) { +void ICAPOptions::TransferList::parse(const string &buf, bool &foundStar) { foundStar = false; const char *item; Index: squid3/src/ICAP/ICAPOptions.h diff -u squid3/src/ICAP/ICAPOptions.h:1.8 squid3/src/ICAP/ICAPOptions.h:1.8.4.1 --- squid3/src/ICAP/ICAPOptions.h:1.8 Thu Apr 5 22:52:43 2007 +++ squid3/src/ICAP/ICAPOptions.h Thu May 3 06:37:07 2007 @@ -62,18 +62,18 @@ time_t timestamp() const { return theTimestamp; }; typedef enum { xferNone, xferPreview, xferIgnore, xferComplete } TransferKind; - TransferKind transferKind(const String &urlPath) const; + TransferKind transferKind(const string &urlPath) const; public: const char *error; // human-readable information; set iff !valid() // ICAP server MUST supply this info Vector methods; - String istag; + string istag; // ICAP server MAY supply this info. If not, Squid supplies defaults. - String service; - String serviceId; + string service; + string serviceId; int max_connections; bool allow204; int preview; @@ -86,9 +86,9 @@ TransferList(); ~TransferList(); - bool matches(const String &urlPath) const; + bool matches(const string &urlPath) const; - void parse(const String &buf, bool &foundStar); + void parse(const string &buf, bool &foundStar); void add(const char *extension); void report(int level, const char *prefix) const; Index: squid3/src/ICAP/ICAPServiceRep.cc diff -u squid3/src/ICAP/ICAPServiceRep.cc:1.9 squid3/src/ICAP/ICAPServiceRep.cc:1.7.4.5 --- squid3/src/ICAP/ICAPServiceRep.cc:1.9 Sat Apr 28 15:51:58 2007 +++ squid3/src/ICAP/ICAPServiceRep.cc Mon May 7 03:32:23 2007 @@ -79,24 +79,24 @@ char *service_type = NULL; - ConfigParser::ParseString(&key); + ConfigParser::ParseString(key); ConfigParser::ParseString(&service_type); ConfigParser::ParseBool(&bypass); - ConfigParser::ParseString(&uri); + ConfigParser::ParseString(uri); - debugs(3, 5, "ICAPService::parseConfigLine (line " << config_lineno << "): " << key.buf() << " " << service_type << " " << bypass); + debugs(3, 5, "ICAPService::parseConfigLine (line " << config_lineno << "): " << key << " " << service_type << " " << bypass); method = parseMethod(service_type); point = parseVectPoint(service_type); debugs(3, 5, "ICAPService::parseConfigLine (line " << config_lineno << "): service is " << methodStr() << "_" << vectPointStr()); - if (uri.cmp("icap://", 7) != 0) { - debugs(3, 0, "ICAPService::parseConfigLine (line " << config_lineno << "): wrong uri: " << uri.buf()); + if (strncmp(uri, "icap://", 7) != 0) { + debugs(3, 0, "ICAPService::parseConfigLine (line " << config_lineno << "): wrong uri: " << uri); return false; } - const char *s = uri.buf() + 7; + const char *s = &uri[7]; const char *e; @@ -216,13 +216,13 @@ return probed() && !up(); } -bool ICAPServiceRep::wantsUrl(const String &urlPath) const +bool ICAPServiceRep::wantsUrl(const string &urlPath) const { Must(hasOptions()); return theOptions->transferKind(urlPath) != ICAPOptions::xferIgnore; } -bool ICAPServiceRep::wantsPreview(const String &urlPath, size_t &wantedSize) const +bool ICAPServiceRep::wantsPreview(const string &urlPath, size_t &wantedSize) const { Must(hasOptions()); @@ -360,7 +360,7 @@ if (!theOptions->methods.empty()) { bool method_found = false; - String method_list; + string method_list; Vector ::iterator iter = theOptions->methods.begin(); while (iter != theOptions->methods.end()) { @@ -378,8 +378,8 @@ if (!method_found) { debugs(93,1, "WARNING: Squid is configured to use ICAP method " << ICAP::methodStr(method) << - " for service " << uri.buf() << - " but OPTIONS response declares the methods are " << method_list.buf()); + " for service " << uri << + " but OPTIONS response declares the methods are " << method_list); } } @@ -392,7 +392,7 @@ // TODO: If skew is negative, the option will be considered down // because of stale options. We should probably change this. debugs(93, 1, "ICAP service's clock is skewed by " << skew << - " seconds: " << uri.buf()); + " seconds: " << uri); } } Index: squid3/src/ICAP/ICAPServiceRep.h diff -u squid3/src/ICAP/ICAPServiceRep.h:1.6 squid3/src/ICAP/ICAPServiceRep.h:1.6.4.1 --- squid3/src/ICAP/ICAPServiceRep.h:1.6 Thu Apr 5 22:52:44 2007 +++ squid3/src/ICAP/ICAPServiceRep.h Thu May 3 06:37:08 2007 @@ -91,22 +91,22 @@ void callWhenReady(Callback *cb, void *data); // the methods below can only be called on an up() service - bool wantsUrl(const String &urlPath) const; - bool wantsPreview(const String &urlPath, size_t &wantedSize) const; + bool wantsUrl(const string &urlPath) const; + bool wantsPreview(const string &urlPath, size_t &wantedSize) const; bool allows204() const; void noteFailure(); // called by transactions to report service failure public: - String key; + string key; ICAP::Method method; ICAP::VectPoint point; - String uri; // service URI + string uri; // service URI // URI components - String host; + string host; int port; - String resource; + string resource; // XXX: use it when selecting a service and handling ICAP errors! bool bypass; Index: squid3/src/ICAP/ICAPXaction.cc diff -u squid3/src/ICAP/ICAPXaction.cc:1.14 squid3/src/ICAP/ICAPXaction.cc:1.12.2.3 --- squid3/src/ICAP/ICAPXaction.cc:1.14 Sat Apr 28 15:51:58 2007 +++ squid3/src/ICAP/ICAPXaction.cc Thu May 3 08:03:37 2007 @@ -104,7 +104,7 @@ { const ICAPServiceRep &s = service(); // TODO: check whether NULL domain is appropriate here - connection = icapPconnPool->pop(s.host.buf(), s.port, NULL, NULL); + connection = icapPconnPool->pop(s.host.c_str(), s.port, NULL, NULL); if (connection >= 0) { debugs(93,3, HERE << "reused pconn FD " << connection); @@ -120,13 +120,13 @@ if (connection < 0) { connection = comm_open(SOCK_STREAM, 0, getOutgoingAddr(NULL), 0, - COMM_NONBLOCKING, s.uri.buf()); + COMM_NONBLOCKING, s.uri.c_str()); if (connection < 0) dieOnConnectionFailure(); // throws } - debugs(93,3, typeName << " opens connection to " << s.host.buf() << ":" << s.port); + debugs(93,3, typeName << " opens connection to " << s.host << ":" << s.port); commSetTimeout(connection, Config.Timeout.connect, &ICAPXaction_noteCommTimedout, this); @@ -135,7 +135,7 @@ comm_add_close_handler(connection, closer, this); connector = &ICAPXaction_noteCommConnected; - commConnectStart(connection, s.host.buf(), s.port, connector, this); + commConnectStart(connection, s.host.c_str(), s.port, connector, this); } /* @@ -169,7 +169,7 @@ if (reuseConnection) { debugs(93,3, HERE << "pushing pconn" << status()); commSetTimeout(connection, -1, NULL, NULL); - icapPconnPool->push(connection, theService->host.buf(), theService->port, NULL, NULL); + icapPconnPool->push(connection, theService->host.c_str(), theService->port, NULL, NULL); } else { debugs(93,3, HERE << "closing pconn" << status()); // comm_close will clear timeout @@ -244,7 +244,7 @@ void ICAPXaction::handleCommTimedout() { - debugs(93, 0, HERE << "ICAP FD " << connection << " timeout to " << theService->methodStr() << " " << theService->uri.buf()); + debugs(93, 0, HERE << "ICAP FD " << connection << " timeout to " << theService->methodStr() << " " << theService->uri); reuseConnection = false; MemBuf mb; mb.init(); Index: squid3/src/auth/digest/auth_digest.cc diff -u squid3/src/auth/digest/auth_digest.cc:1.31 squid3/src/auth/digest/auth_digest.cc:1.29.4.4 --- squid3/src/auth/digest/auth_digest.cc:1.31 Mon Apr 30 10:51:42 2007 +++ squid3/src/auth/digest/auth_digest.cc Thu May 3 06:37:08 2007 @@ -204,7 +204,7 @@ digest_nonce_pool = memPoolCreate("Digest Scheme nonce's", sizeof(digest_nonce_h)); if (!digest_nonce_cache) { - digest_nonce_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string); + digest_nonce_cache = hash_create((HASHCMP *) std::strcmp, 7921, hash_string); assert(digest_nonce_cache); eventAdd("Digest none cache maintenance", authenticateDigestNonceCacheCleanup, NULL, digestConfig.nonceGCInterval, 1); } @@ -1092,7 +1092,7 @@ while (xisspace(*proxy_auth)) proxy_auth++; - String temp(proxy_auth); + string temp(proxy_auth); while (strListGetItem(&temp, ',', &item, &ilen, &pos)) { if ((p = strchr(item, '=')) && (p - item < ilen)) @@ -1208,7 +1208,7 @@ } } - temp.clean(); + temp.clear(); /* now we validate the data given to us */ Index: squid3/src/auth/negotiate/auth_negotiate.cc diff -u squid3/src/auth/negotiate/auth_negotiate.cc:1.12 squid3/src/auth/negotiate/auth_negotiate.cc:1.11.4.2 --- squid3/src/auth/negotiate/auth_negotiate.cc:1.12 Sat Apr 28 15:51:58 2007 +++ squid3/src/auth/negotiate/auth_negotiate.cc Thu May 3 06:37:08 2007 @@ -179,7 +179,7 @@ negotiateauthenticators = helperStatefulCreate("negotiateauthenticator"); if (!proxy_auth_cache) - proxy_auth_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string); + proxy_auth_cache = hash_create((HASHCMP *) std::strcmp, 7921, hash_string); assert(proxy_auth_cache); Index: squid3/src/auth/ntlm/auth_ntlm.cc diff -u squid3/src/auth/ntlm/auth_ntlm.cc:1.34 squid3/src/auth/ntlm/auth_ntlm.cc:1.33.4.2 --- squid3/src/auth/ntlm/auth_ntlm.cc:1.34 Sat Apr 28 15:51:58 2007 +++ squid3/src/auth/ntlm/auth_ntlm.cc Thu May 3 06:37:08 2007 @@ -180,7 +180,7 @@ ntlmauthenticators = helperStatefulCreate("ntlmauthenticator"); if (!proxy_auth_cache) - proxy_auth_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string); + proxy_auth_cache = hash_create((HASHCMP *) std::strcmp, 7921, hash_string); assert(proxy_auth_cache); Index: squid3/src/fs/coss/CossSwapDir.h diff -u squid3/src/fs/coss/CossSwapDir.h:1.6 squid3/src/fs/coss/CossSwapDir.h:1.6.8.1 --- squid3/src/fs/coss/CossSwapDir.h:1.6 Mon May 22 17:45:42 2006 +++ squid3/src/fs/coss/CossSwapDir.h Wed May 2 05:53:05 2007 @@ -36,7 +36,7 @@ virtual void create(); virtual void dump(StoreEntry &)const; ~CossSwapDir(); - virtual StoreSearch *search(String const url, HttpRequest *); + virtual StoreSearch *search(string const url, HttpRequest *); virtual void unlink (StoreEntry &); virtual void statfs (StoreEntry &)const; virtual int canStore(StoreEntry const &)const; Index: squid3/src/fs/coss/store_dir_coss.cc diff -u squid3/src/fs/coss/store_dir_coss.cc:1.35 squid3/src/fs/coss/store_dir_coss.cc:1.30.4.3 --- squid3/src/fs/coss/store_dir_coss.cc:1.35 Mon Apr 30 10:51:42 2007 +++ squid3/src/fs/coss/store_dir_coss.cc Thu May 3 06:37:08 2007 @@ -1170,7 +1170,7 @@ } StoreSearch * -CossSwapDir::search(String const url, HttpRequest *) +CossSwapDir::search(string const url, HttpRequest *) { if (url.size()) fatal ("Cannot search by url yet\n"); @@ -1182,9 +1182,9 @@ CossSwapDir::stripePath() const { if (!stripe_path) { - String result = path; + string result = path; result.append("/stripe"); - const_cast(this)->stripe_path = xstrdup(result.buf()); + const_cast(this)->stripe_path = xstrdup(result.c_str()); } return stripe_path; Index: squid3/src/fs/null/store_null.cc diff -u squid3/src/fs/null/store_null.cc:1.9 squid3/src/fs/null/store_null.cc:1.9.4.1 --- squid3/src/fs/null/store_null.cc:1.9 Sun Oct 8 06:51:47 2006 +++ squid3/src/fs/null/store_null.cc Thu May 3 08:11:27 2007 @@ -103,7 +103,7 @@ } StoreSearch * -NullSwapDir::search(String const url, HttpRequest *) +NullSwapDir::search(string const url, HttpRequest *) { if (url.size()) fatal ("Cannot search by url yet\n"); Index: squid3/src/fs/null/store_null.h diff -u squid3/src/fs/null/store_null.h:1.3 squid3/src/fs/null/store_null.h:1.3.8.1 --- squid3/src/fs/null/store_null.h:1.3 Mon May 22 17:49:27 2006 +++ squid3/src/fs/null/store_null.h Thu May 3 08:11:27 2007 @@ -49,7 +49,7 @@ virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *); virtual void parse(int, char*); virtual void reconfigure (int, char *); - virtual StoreSearch *search(String const url, HttpRequest *); + virtual StoreSearch *search(string const url, HttpRequest *); }; class StoreSearchNull : public StoreSearch Index: squid3/src/fs/ufs/store_dir_ufs.cc diff -u squid3/src/fs/ufs/store_dir_ufs.cc:1.31 squid3/src/fs/ufs/store_dir_ufs.cc:1.28.4.3 --- squid3/src/fs/ufs/store_dir_ufs.cc:1.31 Mon Apr 30 10:51:42 2007 +++ squid3/src/fs/ufs/store_dir_ufs.cc Tue May 1 09:09:29 2007 @@ -1348,7 +1348,7 @@ } StoreSearch * -UFSSwapDir::search(String const url, HttpRequest *request) +UFSSwapDir::search(string const url, HttpRequest *request) { if (url.size()) fatal ("Cannot search by url yet\n"); Index: squid3/src/fs/ufs/ufscommon.h diff -u squid3/src/fs/ufs/ufscommon.h:1.9 squid3/src/fs/ufs/ufscommon.h:1.9.4.1 --- squid3/src/fs/ufs/ufscommon.h:1.9 Wed Sep 13 18:50:33 2006 +++ squid3/src/fs/ufs/ufscommon.h Tue May 1 09:09:29 2007 @@ -63,7 +63,7 @@ virtual void create(); virtual void dump(StoreEntry &) const; ~UFSSwapDir(); - virtual StoreSearch *search(String const url, HttpRequest *); + virtual StoreSearch *search(string const url, HttpRequest *); virtual bool doubleCheck(StoreEntry &); virtual void unlink(StoreEntry &); virtual void statfs(StoreEntry &)const; Index: squid3/src/tests/CapturingStoreEntry.h diff -u squid3/src/tests/CapturingStoreEntry.h:1.1 squid3/src/tests/CapturingStoreEntry.h:1.1.16.1 --- squid3/src/tests/CapturingStoreEntry.h:1.1 Sun Aug 6 19:51:15 2006 +++ squid3/src/tests/CapturingStoreEntry.h Wed May 2 05:53:06 2007 @@ -14,7 +14,7 @@ CapturingStoreEntry() : _buffer_calls(0), _flush_calls(0) {} - String _appended_text; + string _appended_text; int _buffer_calls; int _flush_calls; Index: squid3/src/tests/TestSwapDir.cc diff -u squid3/src/tests/TestSwapDir.cc:1.3 squid3/src/tests/TestSwapDir.cc:1.3.8.1 --- squid3/src/tests/TestSwapDir.cc:1.3 Fri May 26 17:50:33 2006 +++ squid3/src/tests/TestSwapDir.cc Thu May 3 06:37:09 2007 @@ -46,7 +46,7 @@ {} StoreSearch * -TestSwapDir::search(String, HttpRequest *) +TestSwapDir::search(string, HttpRequest *) { return NULL; } Index: squid3/src/tests/TestSwapDir.h diff -u squid3/src/tests/TestSwapDir.h:1.4 squid3/src/tests/TestSwapDir.h:1.4.8.1 --- squid3/src/tests/TestSwapDir.h:1.4 Fri May 26 17:50:33 2006 +++ squid3/src/tests/TestSwapDir.h Thu May 3 06:37:09 2007 @@ -21,7 +21,7 @@ virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *); virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *); virtual void parse(int, char*); - virtual StoreSearch *search(String, HttpRequest *); + virtual StoreSearch *search(string, HttpRequest *); }; typedef RefCount TestSwapDirPointer; Index: squid3/src/tests/testCacheManager.cc diff -u squid3/src/tests/testCacheManager.cc:1.1 squid3/src/tests/testCacheManager.cc:1.1.16.1 --- squid3/src/tests/testCacheManager.cc:1.1 Sun May 28 17:50:19 2006 +++ squid3/src/tests/testCacheManager.cc Wed May 2 05:53:06 2007 @@ -47,8 +47,8 @@ CacheManager manager; manager.registerAction("sample", "my sample", &dummy_action, false, false); CacheManagerAction *anAction = manager.findAction("sample"); - CPPUNIT_ASSERT_EQUAL(String("sample"), String(anAction->action)); - CPPUNIT_ASSERT_EQUAL(String("my sample"), String(anAction->desc)); + CPPUNIT_ASSERT_EQUAL( (string)"sample", (string)anAction->action ); + CPPUNIT_ASSERT_EQUAL( (string)"my sample", (string)anAction->desc ); CPPUNIT_ASSERT_EQUAL(&dummy_action, anAction->handler); CPPUNIT_ASSERT_EQUAL(0, (int)anAction->flags.pw_req); CPPUNIT_ASSERT_EQUAL(0, (int)anAction->flags.atomic); Index: squid3/src/tests/testEvent.cc diff -u squid3/src/tests/testEvent.cc:1.3 squid3/src/tests/testEvent.cc:1.3.14.1 --- squid3/src/tests/testEvent.cc:1.3 Sun Aug 20 18:51:51 2006 +++ squid3/src/tests/testEvent.cc Wed May 2 05:53:06 2007 @@ -104,13 +104,12 @@ scheduler.schedule("test event", CalledEvent::Handler, &event, 0, 0, false); scheduler.schedule("test event2", CalledEvent::Handler, &event2, 0, 0, false); scheduler.dump(anEntry); - CPPUNIT_ASSERT_EQUAL(String( - "Last event to run: last event\n" + string expect = "Last event to run: last event\n" "\n" "Operation\tNext Execution\tWeight\tCallback Valid?\n" "test event\t0.000000 seconds\t0\tN/A\n" - "test event2\t0.000000 seconds\t0\tN/A\n" - ), anEntry->_appended_text); + "test event2\t0.000000 seconds\t0\tN/A\n"; + CPPUNIT_ASSERT_EQUAL( expect, anEntry->_appended_text); delete anEntry; } Index: squid3/src/tests/testHttpRequest.cc diff -u squid3/src/tests/testHttpRequest.cc:1.1 squid3/src/tests/testHttpRequest.cc:1.1.18.1 --- squid3/src/tests/testHttpRequest.cc:1.1 Wed May 3 07:50:43 2006 +++ squid3/src/tests/testHttpRequest.cc Thu May 3 06:37:09 2007 @@ -38,10 +38,10 @@ HttpRequest *nullRequest = NULL; CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port); CPPUNIT_ASSERT_EQUAL(METHOD_GET, aRequest->method); - CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->host)); - CPPUNIT_ASSERT_EQUAL(String("/bar"), aRequest->urlpath); + CPPUNIT_ASSERT_EQUAL((string)"foo", (string)aRequest->host); + CPPUNIT_ASSERT_EQUAL((string)"/bar", aRequest->urlpath); CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol); - CPPUNIT_ASSERT_EQUAL(String("http://foo:90/bar"), String(url)); + CPPUNIT_ASSERT_EQUAL((string)"http://foo:90/bar", (string)url); xfree(url); /* vanilla url, different method */ url = xstrdup("http://foo/bar"); @@ -49,10 +49,10 @@ expected_port = 80; CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port); CPPUNIT_ASSERT_EQUAL(METHOD_PUT, aRequest->method); - CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->host)); - CPPUNIT_ASSERT_EQUAL(String("/bar"), aRequest->urlpath); + CPPUNIT_ASSERT_EQUAL((string)"foo", (string)aRequest->host); + CPPUNIT_ASSERT_EQUAL((string)"/bar", aRequest->urlpath); CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol); - CPPUNIT_ASSERT_EQUAL(String("http://foo/bar"), String(url)); + CPPUNIT_ASSERT_EQUAL((string)"http://foo/bar", (string)url); /* a connect url with non-CONNECT data */ url = xstrdup(":foo/bar"); aRequest = HttpRequest::CreateFromUrlAndMethod(url, METHOD_CONNECT); @@ -64,10 +64,10 @@ expected_port = 45; CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port); CPPUNIT_ASSERT_EQUAL(METHOD_CONNECT, aRequest->method); - CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->host)); - CPPUNIT_ASSERT_EQUAL(String(""), aRequest->urlpath); + CPPUNIT_ASSERT_EQUAL((string)"foo", (string)aRequest->host); + CPPUNIT_ASSERT_EQUAL((string)"", aRequest->urlpath); CPPUNIT_ASSERT_EQUAL(PROTO_NONE, aRequest->protocol); - CPPUNIT_ASSERT_EQUAL(String("foo:45"), String(url)); + CPPUNIT_ASSERT_EQUAL((string)"foo:45", (string)url); xfree(url); } @@ -84,9 +84,9 @@ expected_port = 90; CPPUNIT_ASSERT_EQUAL(expected_port, aRequest->port); CPPUNIT_ASSERT_EQUAL(METHOD_GET, aRequest->method); - CPPUNIT_ASSERT_EQUAL(String("foo"), String(aRequest->host)); - CPPUNIT_ASSERT_EQUAL(String("/bar"), aRequest->urlpath); + CPPUNIT_ASSERT_EQUAL((string)"foo", (string)aRequest->host); + CPPUNIT_ASSERT_EQUAL((string)"/bar", aRequest->urlpath); CPPUNIT_ASSERT_EQUAL(PROTO_HTTP, aRequest->protocol); - CPPUNIT_ASSERT_EQUAL(String("http://foo:90/bar"), String(url)); + CPPUNIT_ASSERT_EQUAL((string)"http://foo:90/bar", (string)url); xfree(url); } Index: squid3/src/tests/testHttpRequestMethod.cc diff -u squid3/src/tests/testHttpRequestMethod.cc:1.2 squid3/src/tests/testHttpRequestMethod.cc:1.2.8.1 --- squid3/src/tests/testHttpRequestMethod.cc:1.2 Fri Sep 1 21:50:30 2006 +++ squid3/src/tests/testHttpRequestMethod.cc Thu May 3 06:37:09 2007 @@ -79,7 +79,7 @@ void testHttpRequestMethod::testConst_str() { - CPPUNIT_ASSERT_EQUAL(String("POST"), String(HttpRequestMethod("post").const_str())); + CPPUNIT_ASSERT_EQUAL((string)"POST", (string)HttpRequestMethod("post").const_str()); } /* @@ -115,5 +115,5 @@ { std::ostringstream buffer; buffer << HttpRequestMethod("get"); - CPPUNIT_ASSERT_EQUAL(String("GET"), String(buffer.str().c_str())); + CPPUNIT_ASSERT_EQUAL((string)"GET", (string)buffer.str().c_str() ); } Index: squid3/src/tests/testStore.cc diff -u squid3/src/tests/testStore.cc:1.4 squid3/src/tests/testStore.cc:1.4.8.1 --- squid3/src/tests/testStore.cc:1.4 Wed May 3 07:50:43 2006 +++ squid3/src/tests/testStore.cc Thu May 3 06:37:09 2007 @@ -21,7 +21,7 @@ void TestStore::get - (String, void (*)(StoreEntry*, void*), void*) + (string, void (*)(StoreEntry*, void*), void*) {} void @@ -48,7 +48,7 @@ } StoreSearch * -TestStore::search(String const url, HttpRequest *) +TestStore::search(string const url, HttpRequest *) { return NULL; } Index: squid3/src/tests/testStore.h diff -u squid3/src/tests/testStore.h:1.2 squid3/src/tests/testStore.h:1.2.8.1 --- squid3/src/tests/testStore.h:1.2 Wed May 3 07:50:43 2006 +++ squid3/src/tests/testStore.h Thu May 3 06:37:09 2007 @@ -49,7 +49,7 @@ (const cache_key*); virtual void get - (String, void (*)(StoreEntry*, void*), void*); + (string, void (*)(StoreEntry*, void*), void*); virtual void init(); @@ -67,7 +67,7 @@ virtual void updateSize(size_t size, int sign) {} - virtual StoreSearch *search(String const url, HttpRequest *); + virtual StoreSearch *search(string const url, HttpRequest *); }; typedef RefCount TestStorePointer; Index: squid3/src/tests/testStoreController.cc diff -u squid3/src/tests/testStoreController.cc:1.5 squid3/src/tests/testStoreController.cc:1.4.8.2 --- squid3/src/tests/testStoreController.cc:1.5 Sat Apr 21 00:52:56 2007 +++ squid3/src/tests/testStoreController.cc Thu May 3 06:37:09 2007 @@ -78,10 +78,9 @@ static StoreEntry * addedEntry(StorePointer hashStore, StorePointer aStore, - String name, - String varySpec, - String varyKey - + string name, + string varySpec, + string varyKey ) { StoreEntry *e = new StoreEntry(); @@ -109,7 +108,7 @@ EBIT_CLR(e->flags, KEY_PRIVATE); e->ping_status = PING_NONE; EBIT_CLR(e->flags, ENTRY_VALIDATED); - e->hashInsert((const cache_key *)name.buf()); /* do it after we clear KEY_PRIVATE */ + e->hashInsert((const cache_key *)name.c_str()); /* do it after we clear KEY_PRIVATE */ return e; } Index: squid3/src/tests/testStoreEntryStream.cc diff -u squid3/src/tests/testStoreEntryStream.cc:1.2 squid3/src/tests/testStoreEntryStream.cc:1.2.12.2 --- squid3/src/tests/testStoreEntryStream.cc:1.2 Sun Aug 6 19:51:16 2006 +++ squid3/src/tests/testStoreEntryStream.cc Sat May 5 07:33:55 2007 @@ -39,7 +39,7 @@ stream.flush(); CPPUNIT_ASSERT_EQUAL(1, anEntry->_buffer_calls); CPPUNIT_ASSERT_EQUAL(1, anEntry->_flush_calls); - CPPUNIT_ASSERT_EQUAL(String("some text !"), anEntry->_appended_text); + CPPUNIT_ASSERT_EQUAL((string)"some text !", (string)anEntry->_appended_text); } delete anEntry; Index: squid3/src/tests/testStoreHashIndex.cc diff -u squid3/src/tests/testStoreHashIndex.cc:1.4 squid3/src/tests/testStoreHashIndex.cc:1.3.8.2 --- squid3/src/tests/testStoreHashIndex.cc:1.4 Sat Apr 21 00:52:56 2007 +++ squid3/src/tests/testStoreHashIndex.cc Thu May 3 06:37:09 2007 @@ -59,9 +59,9 @@ StoreEntry * addedEntry(StorePointer hashStore, StorePointer aStore, - String name, - String varySpec, - String varyKey + string name, + string varySpec, + string varyKey ) { @@ -90,7 +90,7 @@ EBIT_CLR(e->flags, KEY_PRIVATE); e->ping_status = PING_NONE; EBIT_CLR(e->flags, ENTRY_VALIDATED); - e->hashInsert((const cache_key *)name.buf()); /* do it after we clear KEY_PRIVATE */ + e->hashInsert((const cache_key *)name.c_str()); /* do it after we clear KEY_PRIVATE */ return e; } Index: squid3/src/tests/testString.cc diff -u squid3/src/tests/testString.cc:1.2 squid3/src/tests/testString.cc:1.2.12.2 --- squid3/src/tests/testString.cc:1.2 Sun Aug 6 19:51:16 2006 +++ squid3/src/tests/testString.cc Sat May 5 20:18:15 2007 @@ -21,41 +21,168 @@ static Initer ensure_mempools; void +testString::testDefaults() +{ + string aStr; + + /* check this reports as empty */ + CPPUNIT_ASSERT( aStr.empty() ); + CPPUNIT_ASSERT_EQUAL( (const char*)NULL, aStr.c_str() ); + CPPUNIT_ASSERT_EQUAL( 0, aStr.size() ); + + string bStr("foo bar"); + + /* check copy constructor */ + CPPUNIT_ASSERT( !bStr.empty() ); + CPPUNIT_ASSERT_EQUAL( 7, bStr.size() ); + CPPUNIT_ASSERT( NULL != bStr.c_str() ); + CPPUNIT_ASSERT( memcmp(bStr.c_str(), "foo bar", 8) == 0 ); +} + +void +testString::testBooleans() +{ + const string smStr("bar"); + const string bgStr("foo"); + const string eqStr("foo"); + const string nqStr("food"); + + /* mathematical boolean operators */ + CPPUNIT_ASSERT(!(bgStr == smStr )); + CPPUNIT_ASSERT( bgStr != smStr ); + CPPUNIT_ASSERT( bgStr > smStr ); + CPPUNIT_ASSERT(!(bgStr < smStr )); + CPPUNIT_ASSERT( bgStr >= smStr ); + CPPUNIT_ASSERT(!(bgStr <= smStr )); + + /* reverse order to catch corners */ + CPPUNIT_ASSERT(!(smStr == bgStr )); + CPPUNIT_ASSERT( smStr != bgStr ); + CPPUNIT_ASSERT(!(smStr > bgStr )); + CPPUNIT_ASSERT( smStr < bgStr ); + CPPUNIT_ASSERT(!(smStr >= bgStr )); + CPPUNIT_ASSERT( smStr <= bgStr ); + + /* check identical to catch corners */ + CPPUNIT_ASSERT( bgStr == eqStr ); + CPPUNIT_ASSERT(!(bgStr != eqStr )); + CPPUNIT_ASSERT(!(bgStr > eqStr )); + CPPUNIT_ASSERT(!(bgStr < eqStr )); + CPPUNIT_ASSERT( bgStr >= eqStr ); + CPPUNIT_ASSERT( bgStr <= eqStr ); + + /* check _almost_ identical to catch corners */ + CPPUNIT_ASSERT(!(bgStr == nqStr )); + CPPUNIT_ASSERT( bgStr != nqStr ); + CPPUNIT_ASSERT(!(bgStr > nqStr )); + CPPUNIT_ASSERT( bgStr < nqStr ); + CPPUNIT_ASSERT(!(bgStr >= nqStr )); + CPPUNIT_ASSERT( bgStr <= nqStr ); +} + +void +testString::testAppend() +{ + // FIXME: make tests for this. + string aStr("hello"); + + aStr.append(" world"); + CPPUNIT_ASSERT_EQUAL( (string)"hello world", aStr ); + aStr.append(" howsit", 7); + CPPUNIT_ASSERT_EQUAL( (string)"hello world howsit", aStr ); + + string bStr; + string cStr("hello"); + + /* corner cases */ + bStr.append(NULL, 2); + CPPUNIT_ASSERT( bStr.empty() ); + CPPUNIT_ASSERT_EQUAL( 0, bStr.size() ); + CPPUNIT_ASSERT_EQUAL( (string)"", bStr ); + + bStr.append("hello", 5); + CPPUNIT_ASSERT( !bStr.empty() ); + CPPUNIT_ASSERT_EQUAL( 5, bStr.size() ); + CPPUNIT_ASSERT_EQUAL( (string)"hello", bStr ); + + bStr.append(NULL, 2); + CPPUNIT_ASSERT( !bStr.empty() ); + CPPUNIT_ASSERT_EQUAL( 5, bStr.size() ); + CPPUNIT_ASSERT_EQUAL( (string)"hello", bStr ); + + bStr.append(" world untroubled by things such as null termination", 6); + CPPUNIT_ASSERT( !bStr.empty() ); + CPPUNIT_ASSERT_EQUAL( 11, bStr.size() ); + CPPUNIT_ASSERT_EQUAL( (string)"hello world", bStr ); + + cStr.append(" wo"); + CPPUNIT_ASSERT( !cStr.empty() ); + CPPUNIT_ASSERT_EQUAL( 8, cStr.size() ); + CPPUNIT_ASSERT_EQUAL( (string)"hello wo", cStr ); + + cStr.append("rld\0 untroubled by things such as null termination", 10); + CPPUNIT_ASSERT( !cStr.empty() ); + CPPUNIT_ASSERT_EQUAL( 18, cStr.size() ); + CPPUNIT_ASSERT_EQUAL( (string)"hello world\0 untr", cStr ); +} + +void +testString::testAssignments() +{ + // FIXME: make tests for this. +} + +void +testString::testCstrMethods() +{ + // FIXME: make tests for this. + // strcmp, strncmp, etc.... +} + +void +testString::testSearch() +{ + // FIXME: make tests for this. + +// pos, rpos, find, rfind, etc... +} + +void testString::testCmpDefault() { - String left, right; + string left, right; /* two default strings are equal */ - CPPUNIT_ASSERT(!left.cmp(right)); - CPPUNIT_ASSERT(!left.cmp(NULL)); - CPPUNIT_ASSERT(!left.cmp(NULL, 1)); + CPPUNIT_ASSERT(!left.compare(right)); + CPPUNIT_ASSERT(!left.compare(NULL)); + CPPUNIT_ASSERT(!left.compare(NULL, 1)); } void testString::testCmpEmptyString() { - String left(""); - String right; + string left(""); + string right; /* an empty string ("") is equal to a default string */ - CPPUNIT_ASSERT(!left.cmp(right)); - CPPUNIT_ASSERT(!left.cmp(NULL)); - CPPUNIT_ASSERT(!left.cmp(NULL, 1)); + CPPUNIT_ASSERT(!left.compare(right)); + CPPUNIT_ASSERT(!left.compare(NULL)); + CPPUNIT_ASSERT(!left.compare(NULL, 1)); /* reverse the order to catch corners */ - CPPUNIT_ASSERT(!right.cmp(left)); - CPPUNIT_ASSERT(!right.cmp("")); - CPPUNIT_ASSERT(!right.cmp("", 1)); + CPPUNIT_ASSERT(!right.compare(left)); + CPPUNIT_ASSERT(!right.compare("")); + CPPUNIT_ASSERT(!right.compare("", 1)); } void testString::testCmpNotEmptyDefault() { - String left("foo"); - String right; + string left("foo"); + string right; /* empty string sorts before everything */ - CPPUNIT_ASSERT(left.cmp(right) > 0); - CPPUNIT_ASSERT(left.cmp(NULL) > 0); - CPPUNIT_ASSERT(left.cmp(NULL, 1) > 0); + CPPUNIT_ASSERT(left.compare(right) > 0); + CPPUNIT_ASSERT(left.compare(NULL) > 0); + CPPUNIT_ASSERT(left.compare(NULL, 1) > 0); /* reverse for symmetry tests */ - CPPUNIT_ASSERT(right.cmp(left) < 0); - CPPUNIT_ASSERT(right.cmp("foo") < 0); - CPPUNIT_ASSERT(right.cmp("foo", 1) < 0); + CPPUNIT_ASSERT(right.compare(left) < 0); + CPPUNIT_ASSERT(right.compare("foo") < 0); + CPPUNIT_ASSERT(right.compare("foo", 1) < 0); } Index: squid3/src/tests/testString.h diff -u squid3/src/tests/testString.h:1.1 squid3/src/tests/testString.h:1.1.18.1 --- squid3/src/tests/testString.h:1.1 Wed May 3 07:50:43 2006 +++ squid3/src/tests/testString.h Sat May 5 20:18:16 2007 @@ -11,18 +11,33 @@ class testString : public CPPUNIT_NS::TestFixture { CPPUNIT_TEST_SUITE( testString ); + CPPUNIT_TEST( testDefaults ); + /* boolean helper tests */ CPPUNIT_TEST( testCmpDefault ); CPPUNIT_TEST( testCmpEmptyString ); CPPUNIT_TEST( testCmpNotEmptyDefault ); + + CPPUNIT_TEST( testBooleans ); + CPPUNIT_TEST( testAppend ); + CPPUNIT_TEST( testAssignments ); + CPPUNIT_TEST( testCstrMethods ); + CPPUNIT_TEST( testSearch ); CPPUNIT_TEST_SUITE_END(); public: protected: + + /* std::string API */ + void testDefaults(); void testCmpDefault(); void testCmpEmptyString(); void testCmpNotEmptyDefault(); + void testBooleans(); + void testAppend(); + void testAssignments(); + void testCstrMethods(); + void testSearch(); }; #endif - Index: squid3/src/tests/testURLScheme.cc diff -u squid3/src/tests/testURLScheme.cc:1.2 squid3/src/tests/testURLScheme.cc:1.2.8.1 --- squid3/src/tests/testURLScheme.cc:1.2 Fri Sep 1 21:50:30 2006 +++ squid3/src/tests/testURLScheme.cc Thu May 3 06:37:09 2007 @@ -104,9 +104,9 @@ void testURLScheme::testConst_str() { - String lhs("wais"); + string lhs("wais"); URLScheme wais(PROTO_WAIS); - String rhs(wais.const_str()); + string rhs(wais.const_str()); CPPUNIT_ASSERT_EQUAL(lhs, rhs); } @@ -143,7 +143,7 @@ { std::ostringstream buffer; buffer << URLScheme(PROTO_HTTP); - String http_str("http"); - String from_buf(buffer.str().c_str()); + string http_str("http"); + string from_buf(buffer.str().c_str()); CPPUNIT_ASSERT_EQUAL(http_str, from_buf); } Index: squid3/src/tests/test_http_range.cc diff -u squid3/src/tests/test_http_range.cc:1.1 squid3/src/tests/test_http_range.cc:1.1.16.1 --- squid3/src/tests/test_http_range.cc:1.1 Sun May 21 07:50:42 2006 +++ squid3/src/tests/test_http_range.cc Thu May 3 06:37:09 2007 @@ -56,10 +56,10 @@ return NULL; } -extern String httpHeaderGetList(const HttpHeader * hdr, http_hdr_type id) +extern string httpHeaderGetList(const HttpHeader * hdr, http_hdr_type id) { fatal ("dummy function\n"); - return String(); + return ""; } SQUIDCEXTERN int httpHeaderHas(const HttpHeader * hdr, http_hdr_type type) @@ -76,7 +76,7 @@ void testRangeParser(char const *rangestring) { - String aString (rangestring); + string aString (rangestring); HttpHdrRange *range = HttpHdrRange::ParseCreate (&aString); if (!range) @@ -96,7 +96,7 @@ HttpHdrRange * rangeFromString(char const *rangestring) { - String aString (rangestring); + string aString (rangestring); HttpHdrRange *range = HttpHdrRange::ParseCreate (&aString); if (!range)