File 10834.patch of Package squid-beta

---------------------
PatchSet 10834 
Date: 2007/05/29 13:31:36
Author: amosjeffries
Branch: HEAD
Tag: (none) 
Log:
Rollback String API changes. Delayed to 3.1.

Members: 
	ChangeLog:1.555->1.556 
	src/ACLExtUser.cc:1.10->1.11 
	src/ACLHTTPHeaderData.cc:1.4->1.5 
	src/ACLHTTPHeaderData.h:1.3->1.4 
	src/ACLUrlPath.cc:1.3->1.4 
	src/AuthUser.cc:1.8->1.9 
	src/CommonPool.h:1.4->1.5 
	src/CompositePoolNode.h:1.7->1.8 
	src/ConfigParser.h:1.7->1.8 
	src/DelayBucket.cc:1.6->1.7 
	src/DelayTagged.cc:1.6->1.7 
	src/DelayTagged.h:1.5->1.6 
	src/ESI.cc:1.24->1.25 
	src/ESIAssign.cc:1.5->1.6 
	src/ESIAssign.h:1.4->1.5 
	src/ESICustomParser.cc:1.9->1.10 
	src/ESICustomParser.h:1.7->1.8 
	src/ESISegment.cc:1.5->1.6 
	src/ESIVarState.cc:1.9->1.10 
	src/ESIVarState.h:1.3->1.4 
	src/ExternalACLEntry.h:1.7->1.8 
	src/HttpHdrCc.cc:1.30->1.31 
	src/HttpHdrRange.cc:1.43->1.44 
	src/HttpHdrSc.cc:1.5->1.6 
	src/HttpHdrSc.h:1.2->1.3 
	src/HttpHdrScTarget.cc:1.3->1.4 
	src/HttpHdrScTarget.h:1.2->1.3 
	src/HttpHeader.cc:1.132->1.133 
	src/HttpHeader.h:1.20->1.21 
	src/HttpHeaderRange.h:1.9->1.10 
	src/HttpHeaderTools.cc:1.60->1.61 
	src/HttpReply.cc:1.94->1.95 
	src/HttpReply.h:1.19->1.20 
	src/HttpRequest.cc:1.75->1.76 
	src/HttpRequest.h:1.28->1.29 
	src/HttpStatusLine.cc:1.33->1.34 
	src/HttpStatusLine.h:1.3->1.4 
	src/Makefile.am:1.181->1.182 
	src/MemObject.cc:1.27->1.28 
	src/PeerDigest.h:1.2->1.3 
	src/SqString.cc:1.7->1.8(DEAD) 
	src/SqString.cci:1.2->1.3(DEAD) 
	src/SqString.h:1.3->1.4(DEAD) 
	src/SquidString.h:1.9->1.10 
	src/Store.h:1.34->1.35 
	src/StoreHashIndex.h:1.3->1.4 
	src/String.cc:1.25->1.26 
	src/String.cci:1.8->1.9 
	src/SwapDir.cc:1.12->1.13 
	src/SwapDir.h:1.12->1.13 
	src/access_log.cc:1.125->1.126 
	src/cache_cf.cc:1.511->1.512 
	src/client_db.cc:1.69->1.70 
	src/client_side.cc:1.755->1.756 
	src/client_side_reply.cc:1.128->1.129 
	src/client_side_request.cc:1.88->1.89 
	src/client_side_request.h:1.29->1.30 
	src/dns_internal.cc:1.99->1.100 
	src/errorpage.cc:1.226->1.227 
	src/external_acl.cc:1.79->1.80 
	src/fqdncache.cc:1.172->1.173 
	src/ftp.cc:1.423->1.424 
	src/gopher.cc:1.208->1.209 
	src/http.cc:1.522->1.523 
	src/ident.cc:1.76->1.77 
	src/internal.cc:1.46->1.47 
	src/ipcache.cc:1.260->1.261 
	src/net_db.cc:1.195->1.196 
	src/pconn.cc:1.52->1.53 
	src/peer_digest.cc:1.124->1.125 
	src/protos.h:1.546->1.547 
	src/redirect.cc:1.119->1.120 
	src/stat.cc:1.406->1.407 
	src/store.cc:1.614->1.615 
	src/store_dir.cc:1.160->1.161 
	src/store_log.cc:1.33->1.34 
	src/structs.h:1.557->1.558 
	src/url.cc:1.161->1.162 
	src/urn.cc:1.106->1.107 
	src/whois.cc:1.44->1.45 
	src/DiskIO/AIO/AIODiskFile.cc:1.5->1.6 
	src/DiskIO/AIO/AIODiskFile.h:1.3->1.4 
	src/ICAP/ICAPConfig.cc:1.15->1.16 
	src/ICAP/ICAPConfig.h:1.12->1.13 
	src/ICAP/ICAPModXact.cc:1.32->1.33 
	src/ICAP/ICAPOptXact.cc:1.7->1.8 
	src/ICAP/ICAPOptions.cc:1.11->1.12 
	src/ICAP/ICAPOptions.h:1.10->1.11 
	src/ICAP/ICAPServiceRep.cc:1.13->1.14 
	src/ICAP/ICAPServiceRep.h:1.8->1.9 
	src/ICAP/ICAPXaction.cc:1.18->1.19 
	src/auth/digest/auth_digest.cc:1.56->1.57 
	src/auth/negotiate/auth_negotiate.cc:1.19->1.20 
	src/auth/ntlm/auth_ntlm.cc:1.69->1.70 
	src/fs/coss/CossSwapDir.h:1.7->1.8 
	src/fs/coss/store_dir_coss.cc:1.74->1.75 
	src/fs/null/store_null.cc:1.13->1.14 
	src/fs/null/store_null.h:1.4->1.5 
	src/fs/ufs/store_dir_ufs.cc:1.83->1.84 
	src/fs/ufs/ufscommon.h:1.10->1.11 
	src/tests/CapturingStoreEntry.h:1.2->1.3 
	src/tests/TestSwapDir.cc:1.4->1.5 
	src/tests/TestSwapDir.h:1.5->1.6 
	src/tests/testCacheManager.cc:1.3->1.4 
	src/tests/testEvent.cc:1.5->1.6 
	src/tests/testHttpRequest.cc:1.3->1.4 
	src/tests/testHttpRequestMethod.cc:1.3->1.4 
	src/tests/testStore.cc:1.5->1.6 
	src/tests/testStore.h:1.3->1.4 
	src/tests/testStoreController.cc:1.6->1.7 
	src/tests/testStoreEntryStream.cc:1.4->1.5 
	src/tests/testStoreHashIndex.cc:1.5->1.6 
	src/tests/testString.cc:1.5->1.6 
	src/tests/testString.h:1.4->1.5 
	src/tests/testURLScheme.cc:1.3->1.4 
	src/tests/test_http_range.cc:1.2->1.3 

Index: squid3/ChangeLog
===================================================================
RCS file: /cvsroot/squid/squid3/ChangeLog,v
retrieving revision 1.555
retrieving revision 1.556
diff -u -r1.555 -r1.556
--- squid3/ChangeLog	18 May 2007 06:41:21 -0000	1.555
+++ squid3/ChangeLog	29 May 2007 13:31:36 -0000	1.556
@@ -28,7 +28,6 @@
 	- Improved high-resolution profiling
 	- Windows overlapped-IO and thread support added to the Async IO disk code
 	- Improvements for handling large DNS replies
-	- Adds standard API for string handling
 
 Changes to squid-2.5 ():
 
Index: squid3/src/ACLExtUser.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ACLExtUser.cc,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- squid3/src/ACLExtUser.cc	18 May 2007 06:41:21 -0000	1.10
+++ squid3/src/ACLExtUser.cc	29 May 2007 13:31:36 -0000	1.11
@@ -1,5 +1,5 @@
 /*
- * $Id: ACLExtUser.cc,v 1.10 2007/05/18 06:41:21 amosjeffries Exp $
+ * $Id: ACLExtUser.cc,v 1.11 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 28    Access Control
  * AUTHOR: Duane Wessels
@@ -79,7 +79,7 @@
 ACLExtUser::match(ACLChecklist *checklist)
 {
     if (checklist->request->extacl_user.size()) {
-        return data->match(checklist->request->extacl_user.c_str());
+        return data->match(checklist->request->extacl_user.buf());
     } else {
         return -1;
     }
Index: squid3/src/ACLHTTPHeaderData.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ACLHTTPHeaderData.cc,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/ACLHTTPHeaderData.cc	18 May 2007 06:41:21 -0000	1.4
+++ squid3/src/ACLHTTPHeaderData.cc	29 May 2007 13:31:36 -0000	1.5
@@ -1,5 +1,5 @@
 /*
- * $Id: ACLHTTPHeaderData.cc,v 1.4 2007/05/18 06:41:21 amosjeffries Exp $
+ * $Id: ACLHTTPHeaderData.cc,v 1.5 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 28    Access Control
  * AUTHOR: Duane Wessels
@@ -63,18 +63,18 @@
     if (hdr == NULL)
         return false;
 
-    debugs(28, 3, "aclHeaderData::match: checking '" << hdrName << "'");
+    debugs(28, 3, "aclHeaderData::match: checking '" << hdrName.buf() << "'");
 
-    string value = hdrId != HDR_BAD_HDR ? hdr->getStrOrList(hdrId) : hdr->getByName(hdrName.c_str());
+    String value = hdrId != HDR_BAD_HDR ? hdr->getStrOrList(hdrId) : hdr->getByName(hdrName.buf());
 
-    return regex_rule->match(value.c_str());
+    return regex_rule->match(value.buf());
 }
 
 wordlist *
 ACLHTTPHeaderData::dump()
 {
     wordlist *W = NULL;
-    wordlistAdd(&W, hdrName.c_str());
+    wordlistAdd(&W, hdrName.buf());
     wordlist * regex_dump = regex_rule->dump();
     wordlistAddWl(&W, regex_dump);
     wordlistDestroy(&regex_dump);
@@ -87,14 +87,14 @@
     char* t = strtokFile();
     assert (t != NULL);
     hdrName = t;
-    hdrId = httpHeaderIdByNameDef(hdrName.c_str(), hdrName.size());
+    hdrId = httpHeaderIdByNameDef(hdrName.buf(), strlen(hdrName.buf()));
     regex_rule->parse();
 }
 
 bool
 ACLHTTPHeaderData::empty() const
 {
-    return (hdrId == HDR_BAD_HDR && !hdrName.c_str()) || regex_rule->empty();
+    return (hdrId == HDR_BAD_HDR && !hdrName.buf()) || regex_rule->empty();
 }
 
 ACLData<HttpHeader*> *
Index: squid3/src/ACLHTTPHeaderData.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ACLHTTPHeaderData.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/ACLHTTPHeaderData.h	18 May 2007 06:41:21 -0000	1.3
+++ squid3/src/ACLHTTPHeaderData.h	29 May 2007 13:31:36 -0000	1.4
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ACLHTTPHeaderData.h,v 1.3 2007/05/18 06:41:21 amosjeffries Exp $
+ * $Id: ACLHTTPHeaderData.h,v 1.4 2007/05/29 13:31:36 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -53,7 +53,7 @@
 
 private:
     http_hdr_type hdrId; // set if header is known
-    string hdrName; // always set
+    String hdrName; // always set
     ACLData<char const *> * regex_rule;
 };
 
Index: squid3/src/ACLUrlPath.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ACLUrlPath.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/ACLUrlPath.cc	18 May 2007 06:41:21 -0000	1.3
+++ squid3/src/ACLUrlPath.cc	29 May 2007 13:31:36 -0000	1.4
@@ -1,5 +1,5 @@
 /*
- * $Id: ACLUrlPath.cc,v 1.3 2007/05/18 06:41:21 amosjeffries Exp $
+ * $Id: ACLUrlPath.cc,v 1.4 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 28    Access Control
  * AUTHOR: Duane Wessels
@@ -47,7 +47,7 @@
 int
 ACLUrlPathStrategy::match (ACLData<char const *> * &data, ACLChecklist *checklist)
 {
-    char *esc_buf = xstrdup(checklist->request->urlpath.c_str());
+    char *esc_buf = xstrdup(checklist->request->urlpath.buf());
     rfc1738_unescape(esc_buf);
     int result = data->match(esc_buf);
     safe_free(esc_buf);
Index: squid3/src/AuthUser.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/AuthUser.cc,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- squid3/src/AuthUser.cc	18 May 2007 06:41:21 -0000	1.8
+++ squid3/src/AuthUser.cc	29 May 2007 13:31:36 -0000	1.9
@@ -1,6 +1,6 @@
 
 /*
- * $Id: AuthUser.cc,v 1.8 2007/05/18 06:41:21 amosjeffries Exp $
+ * $Id: AuthUser.cc,v 1.9 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 29    Authenticator
  * AUTHOR:  Robert Collins
@@ -143,7 +143,7 @@
     if (!proxy_auth_username_cache) {
         /* First time around, 7921 should be big enough */
         proxy_auth_username_cache =
-            hash_create((HASHCMP *) std::strcmp, 7921, hash_string);
+            hash_create((HASHCMP *) strcmp, 7921, hash_string);
         assert(proxy_auth_username_cache);
         eventAdd("User Cache Maintenance", cacheCleanup, NULL, Config.authenticateGCInterval, 1);
     }
Index: squid3/src/CommonPool.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/CommonPool.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/CommonPool.h	18 May 2007 06:41:22 -0000	1.4
+++ squid3/src/CommonPool.h	29 May 2007 13:31:36 -0000	1.5
@@ -1,6 +1,6 @@
 
 /*
- * $Id: CommonPool.h,v 1.4 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: CommonPool.h,v 1.5 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 77    Delay Pools
  * AUTHOR: Robert Collins <robertc@squid-cache.org>
@@ -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.c_str(); }
+    char const* theClassTypeLabel() const {return typeLabel.buf();}
 
 protected:
     CommonPool();
-    string typeLabel;
+    String typeLabel;
 };
 
 #endif
Index: squid3/src/CompositePoolNode.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/CompositePoolNode.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- squid3/src/CompositePoolNode.h	18 May 2007 06:41:22 -0000	1.7
+++ squid3/src/CompositePoolNode.h	29 May 2007 13:31:36 -0000	1.8
@@ -1,6 +1,6 @@
 
 /*
- * $Id: CompositePoolNode.h,v 1.7 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: CompositePoolNode.h,v 1.8 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 77    Delay Pools
  * AUTHOR: Robert Collins <robertc@squid-cache.org>
@@ -78,7 +78,7 @@
 
         struct IN_ADDR src_addr;
         AuthUserRequest *user;
-        string tag;
+        String tag;
     };
 
 protected:
Index: squid3/src/ConfigParser.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ConfigParser.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- squid3/src/ConfigParser.h	18 May 2007 06:41:22 -0000	1.7
+++ squid3/src/ConfigParser.h	29 May 2007 13:31:36 -0000	1.8
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ConfigParser.h,v 1.7 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ConfigParser.h,v 1.8 2007/05/29 13:31:36 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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/DelayBucket.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/DelayBucket.cc,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- squid3/src/DelayBucket.cc	18 May 2007 06:41:22 -0000	1.6
+++ squid3/src/DelayBucket.cc	29 May 2007 13:31:36 -0000	1.7
@@ -1,6 +1,6 @@
 
 /*
- * $Id: DelayBucket.cc,v 1.6 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: DelayBucket.cc,v 1.7 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 77    Delay Pools
  * AUTHOR: Robert Collins <robertc@squid-cache.org>
@@ -54,7 +54,7 @@
 #include "ConfigParser.h"
 #include "DelayId.h"
 #include "Array.h"
-#include "SquidString.h"
+#include "String.h"
 #include "CommonPool.h"
 #include "CompositePoolNode.h"
 #include "DelayPool.h"
Index: squid3/src/DelayTagged.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/DelayTagged.cc,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- squid3/src/DelayTagged.cc	18 May 2007 06:41:22 -0000	1.6
+++ squid3/src/DelayTagged.cc	29 May 2007 13:31:36 -0000	1.7
@@ -1,6 +1,6 @@
 
 /*
- * $Id: DelayTagged.cc,v 1.6 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: DelayTagged.cc,v 1.7 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 77    Delay Pools
  * AUTHOR: Robert Collins <robertc@squid-cache.org>
@@ -77,7 +77,7 @@
 DelayTaggedCmp(DelayTaggedBucket::Pointer const &left, DelayTaggedBucket::Pointer const &right)
 {
     /* for rate limiting, case insensitive */
-    return strcasecmp(left->tag, right->tag);
+    return left->tag.caseCmp(right->tag.buf());
 }
 
 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.c_str());
+    storeAppendPrintf(entry, " %s:", tag.buf());
     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
===================================================================
RCS file: /cvsroot/squid/squid3/src/DelayTagged.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/DelayTagged.h	18 May 2007 06:41:22 -0000	1.5
+++ squid3/src/DelayTagged.h	29 May 2007 13:31:36 -0000	1.6
@@ -1,6 +1,6 @@
 
 /*
- * $Id: DelayTagged.h,v 1.5 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: DelayTagged.h,v 1.6 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 77    Delay Pools
  * AUTHOR: Robert Collins <robertc@squid-cache.org>
@@ -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<DelayTagged>, string &);
+        Id (RefCount<DelayTagged>, String &);
         ~Id();
         virtual int bytesWanted (int min, int max) const;
         virtual void bytesIn(int qty);
Index: squid3/src/ESI.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESI.cc,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- squid3/src/ESI.cc	18 May 2007 06:41:22 -0000	1.24
+++ squid3/src/ESI.cc	29 May 2007 13:31:36 -0000	1.25
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ESI.cc,v 1.24 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESI.cc,v 1.25 2007/05/29 13:31:36 amosjeffries Exp $
  *
  * DEBUG: section 86    ESI processing
  * AUTHOR: Robert Collins
@@ -2450,7 +2450,7 @@
              */
             return 0;
 
-        if (strstr (sctusable->content, "ESI/1.0"))
+        if (strstr (sctusable->content.buf(), "ESI/1.0"))
             rv = 1;
 
         httpHdrScTargetDestroy (sctusable);
Index: squid3/src/ESIAssign.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESIAssign.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/ESIAssign.cc	18 May 2007 06:41:22 -0000	1.5
+++ squid3/src/ESIAssign.cc	29 May 2007 13:31:37 -0000	1.6
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ESIAssign.cc,v 1.5 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESIAssign.cc,v 1.6 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 86    ESI processing
  * AUTHOR: Robert Collins
@@ -83,7 +83,7 @@
     variable = NULL;
 
     if (unevaluatedVariable.size()) {
-        varState->feedData(unevaluatedVariable.c_str(), unevaluatedVariable.size());
+        varState->feedData(unevaluatedVariable.buf(), 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.c_str(), name.size(), value);
+    varState->addVariable (name.buf(), 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.c_str(), expression.size());
+    ESISegment::ListAppend (state.getOutput(), expression.buf(), expression.size());
 }
Index: squid3/src/ESIAssign.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESIAssign.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/ESIAssign.h	18 May 2007 06:41:22 -0000	1.4
+++ squid3/src/ESIAssign.h	29 May 2007 13:31:37 -0000	1.5
@@ -1,5 +1,5 @@
 /*
- * $Id: ESIAssign.h,v 1.4 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESIAssign.h,v 1.5 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 86    ESI processing
  * AUTHOR: Robert Collins
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESICustomParser.cc,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- squid3/src/ESICustomParser.cc	18 May 2007 06:41:22 -0000	1.9
+++ squid3/src/ESICustomParser.cc	29 May 2007 13:31:37 -0000	1.10
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ESICustomParser.cc,v 1.9 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESICustomParser.cc,v 1.10 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 86    ESI processing
  * AUTHOR: Robert Collins
@@ -109,7 +109,7 @@
     }
 
     size_t openESITags (0);
-    char const *currentPos = content.c_str();
+    char const *currentPos = content.buf();
     size_t remainingCount = content.size();
     char const *tag = NULL;
 
@@ -302,7 +302,7 @@
 ESICustomParser::errorString() const
 {
     if (error.size())
-        return error.c_str();
+        return error.buf();
     else
         return "Parsing error strings not implemented";
 }
Index: squid3/src/ESICustomParser.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESICustomParser.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- squid3/src/ESICustomParser.h	18 May 2007 06:41:22 -0000	1.7
+++ squid3/src/ESICustomParser.h	29 May 2007 13:31:37 -0000	1.8
@@ -1,5 +1,5 @@
 /*
- * $Id: ESICustomParser.h,v 1.7 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESICustomParser.h,v 1.8 2007/05/29 13:31:37 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESISegment.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/ESISegment.cc	18 May 2007 06:41:22 -0000	1.5
+++ squid3/src/ESISegment.cc	29 May 2007 13:31:37 -0000	1.6
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ESISegment.cc,v 1.5 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESISegment.cc,v 1.6 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 86    ESI processing
  * AUTHOR: Robert Collins
@@ -234,7 +234,7 @@
 void
 ESISegment::dumpOne() const
 {
-    string temp;
+    String temp;
     temp.limitInit(buf, len);
-    debugs(86, 9, "ESISegment::dumpOne: \"" << temp << "\"");
+    debugs(86, 9, "ESISegment::dumpOne: \"" << temp.buf() << "\"");
 }
Index: squid3/src/ESIVarState.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESIVarState.cc,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- squid3/src/ESIVarState.cc	18 May 2007 06:41:22 -0000	1.9
+++ squid3/src/ESIVarState.cc	29 May 2007 13:31:37 -0000	1.10
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ESIVarState.cc,v 1.9 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESIVarState.cc,v 1.10 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 86    ESI processing
  * AUTHOR: Robert Collins
@@ -318,9 +318,9 @@
 }
 
 void
-ESIVarState::removeVariable (string const &name)
+ESIVarState::removeVariable (String const &name)
 {
-    Variable *candidate = static_cast <Variable *>(variables.find (name.c_str(), name.size()));
+    Variable *candidate = static_cast <Variable *>(variables.find (name.buf(), 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.c_str(), S.size());
+                ESISegment::ListAppend (state.getOutput(), S.buf(), 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.c_str(), S.size());
+            String S (state.header().getList (HDR_ACCEPT_LANGUAGE));
+            ESISegment::ListAppend (state.getOutput(), S.buf(), S.size());
         } else {
             if (state.header().hasListMember (HDR_ACCEPT_LANGUAGE, subref, ',')) {
                 s = "true";
@@ -885,9 +885,10 @@
     if (!tempstr[0])
         return;
 
-    string strVary (rep->header.getList (HDR_VARY));
+    String strVary (rep->header.getList (HDR_VARY));
 
-    if (!strVary.size() || strVary[0] != '*') {
+    if (!strVary.size() || strVary.buf()[0] != '*') {
         rep->header.putStr (HDR_VARY, tempstr);
     }
 }
+
Index: squid3/src/ESIVarState.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ESIVarState.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/ESIVarState.h	18 May 2007 06:41:22 -0000	1.3
+++ squid3/src/ESIVarState.h	29 May 2007 13:31:37 -0000	1.4
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ESIVarState.h,v 1.3 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ESIVarState.h,v 1.4 2007/05/29 13:31:37 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/ExternalACLEntry.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- squid3/src/ExternalACLEntry.h	18 May 2007 06:41:22 -0000	1.7
+++ squid3/src/ExternalACLEntry.h	29 May 2007 13:31:37 -0000	1.8
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ExternalACLEntry.h,v 1.7 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: ExternalACLEntry.h,v 1.8 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 82    External ACL
  * AUTHOR: Henrik Nordstrom, MARA Systems AB
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHdrCc.cc,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- squid3/src/HttpHdrCc.cc	18 May 2007 06:41:22 -0000	1.30
+++ squid3/src/HttpHdrCc.cc	29 May 2007 13:31:37 -0000	1.31
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHdrCc.cc,v 1.30 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHdrCc.cc,v 1.31 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 65    HTTP Cache Control Header
  * AUTHOR: Alex Rousskov
@@ -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,16 +131,17 @@
             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 << "'");
+            debugs(65, 2, "hdr cc: unknown cache-directive: near '" << item << "' in '" << str->buf() << "'");
             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 << "'");
+                debugs(65, 2, "hdr cc: ignoring duplicate cache-directive: near '" << item << "' in '" << str->buf() << "'");
 
             CcFieldsInfo[type].stat.repCount++;
 
@@ -205,8 +206,8 @@
 {
     assert(cc);
 
-    if (cc->other.c_str())
-        cc->other.clear();
+    if (cc->other.buf())
+        cc->other.clean();
 
     memFree(cc, MEM_HTTP_HDR_CC);
 }
@@ -235,7 +236,7 @@
         if (EBIT_TEST(cc->mask, flag) && flag != CC_OTHER) {
 
             /* print option name */
-            packerPrintf(p, (pcount ? ", %s" : "%s"), CcFieldsInfo[flag].name.c_str());
+            packerPrintf(p, (pcount ? ", %s" : "%s"), CcFieldsInfo[flag].name.buf());
 
             /* handle options with values */
 
@@ -253,7 +254,7 @@
     }
 
     if (cc->other.size())
-        packerPrintf(p, (pcount ? ", %s" : "%s"), cc->other.c_str());
+        packerPrintf(p, (pcount ? ", %s" : "%s"), cc->other.buf());
 }
 
 /* negative max_age will clean old max_Age setting */
@@ -299,7 +300,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.c_str() : "INVALID";
+    const char *name = valid_id ? CcFieldsInfo[id].name.buf() : "INVALID";
 
     if (count || valid_id)
         storeAppendPrintf(sentry, "%2d\t %-20s\t %5d\t %6.2f\n",
Index: squid3/src/HttpHdrRange.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHdrRange.cc,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- squid3/src/HttpHdrRange.cc	18 May 2007 06:41:22 -0000	1.43
+++ squid3/src/HttpHdrRange.cc	29 May 2007 13:31:37 -0000	1.44
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHdrRange.cc,v 1.43 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHdrRange.cc,v 1.44 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 64    HTTP Range Header
  * AUTHOR: Alex Rousskov
@@ -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 << "'");
+    debugs(64, 8, "parsing range field: '" << range_spec->buf() << "'");
     /* check range type */
 
-    if (strncasecmp(*range_spec,"bytes=", 6))
+    if (range_spec->caseCmp("bytes=", 6))
         return 0;
 
     /* skip "bytes="; hack! */
-    pos = range_spec->c_str() + 5;
+    pos = range_spec->buf() + 5;
 
     /* iterate through comma separated list */
     while (strListGetItem(range_spec, ',', &item, &ilen, &pos)) {
@@ -276,7 +276,8 @@
         ++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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHdrSc.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/HttpHdrSc.cc	18 May 2007 06:41:22 -0000	1.5
+++ squid3/src/HttpHdrSc.cc	29 May 2007 13:31:37 -0000	1.6
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHdrSc.cc,v 1.5 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHdrSc.cc,v 1.6 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 90    HTTP Cache Control Header
  * AUTHOR: Alex Rousskov
@@ -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,10 +135,11 @@
             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 << "'");
+            debugs(90, 2, "hdr sc: unknown control-directive: near '" << item << "' in '" << str->buf() << "'");
             type = SC_OTHER;
         }
 
@@ -162,7 +163,7 @@
 
         if (EBIT_TEST(sct->mask, type)) {
             if (type != SC_OTHER)
-                debugs(90, 2, "hdr sc: ignoring duplicate control-directive: near '" << item << "' in '" << *str << "'");
+                debugs(90, 2, "hdr sc: ignoring duplicate control-directive: near '" << item << "' in '" << str->buf() << "'");
 
             ScFieldsInfo[type].stat.repCount++;
 
@@ -196,7 +197,7 @@
 
             if (!p || !httpHeaderParseQuotedString(p, &sct->content)) {
                 debugs(90, 2, "sc: invalid content= quoted string near '" << item << "'");
-                sct->content.clear();
+                sct->content.clean();
                 EBIT_CLR(sct->mask, type);
             }
 
@@ -257,7 +258,7 @@
         if (EBIT_TEST(sc->mask, flag) && flag != SC_OTHER) {
 
             /* print option name */
-            packerPrintf(p, (pcount ? ", %s" : "%s"), ScFieldsInfo[flag].name.c_str());
+            packerPrintf(p, (pcount ? ", %s" : "%s"), ScFieldsInfo[flag].name.buf());
 
             /* handle options with values */
 
@@ -265,14 +266,14 @@
                 packerPrintf(p, "=%d", (int) sc->max_age);
 
             if (flag == SC_CONTENT)
-                packerPrintf(p, "=\"%s\"", sc->content.c_str());
+                packerPrintf(p, "=\"%s\"", sc->content.buf());
 
             pcount++;
         }
     }
 
     if (sc->target.size())
-        packerPrintf (p, ";%s", sc->target.c_str());
+        packerPrintf (p, ";%s", sc->target.buf());
 }
 
 void
@@ -339,7 +340,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.c_str() : "INVALID";
+    const char *name = valid_id ? ScFieldsInfo[id].name.buf() : "INVALID";
 
     if (count || valid_id)
         storeAppendPrintf(sentry, "%2d\t %-20s\t %5d\t %6.2f\n",
@@ -352,7 +353,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.c_str() : "INVALID";
+    const char *name = valid_id ? ScFieldsInfo[id].name.buf() : "INVALID";
 
     if (count || valid_id)
         storeAppendPrintf(sentry, "%2d\t %-20s\t %5d\t %6.2f\n",
@@ -369,9 +370,9 @@
     while (node) {
         HttpHdrScTarget *sct = (HttpHdrScTarget *)node->data;
 
-        if (target && !sct->target.empty() && !strcmp(target, sct->target) )
+        if (target && sct->target.buf() && !strcmp (target, sct->target.buf()))
             return sct;
-        else if (!target && sct->target.empty())
+        else if (!target && !sct->target.buf())
             return sct;
 
         node = node->next;
Index: squid3/src/HttpHdrSc.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHdrSc.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- squid3/src/HttpHdrSc.h	18 May 2007 06:41:22 -0000	1.2
+++ squid3/src/HttpHdrSc.h	29 May 2007 13:31:37 -0000	1.3
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHdrSc.h,v 1.2 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHdrSc.h,v 1.3 2007/05/29 13:31:37 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHdrScTarget.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/HttpHdrScTarget.cc	18 May 2007 06:41:22 -0000	1.3
+++ squid3/src/HttpHdrScTarget.cc	29 May 2007 13:31:37 -0000	1.4
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHdrScTarget.cc,v 1.3 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHdrScTarget.cc,v 1.4 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 90    HTTP Cache Control Header
  * AUTHOR: Alex Rousskov
@@ -58,6 +58,8 @@
 httpHdrScTargetDestroy(HttpHdrScTarget * sc)
 {
     assert(sc);
+    sc->target.clean();
+    sc->content.clean();
     delete sc;
 }
 
@@ -66,7 +68,7 @@
 {
     HttpHdrScTarget *dup;
     assert(sc);
-    dup = httpHdrScTargetCreate(sc->target.c_str());
+    dup = httpHdrScTargetCreate(sc->target.buf());
     dup->mask = sc->mask;
     dup->max_age = sc->max_age;
     dup->content = sc->content;
Index: squid3/src/HttpHdrScTarget.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHdrScTarget.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- squid3/src/HttpHdrScTarget.h	18 May 2007 06:41:22 -0000	1.2
+++ squid3/src/HttpHdrScTarget.h	29 May 2007 13:31:37 -0000	1.3
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHdrScTarget.h,v 1.2 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHdrScTarget.h,v 1.3 2007/05/29 13:31:37 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHeader.cc,v
retrieving revision 1.132
retrieving revision 1.133
diff -u -r1.132 -r1.133
--- squid3/src/HttpHeader.cc	18 May 2007 06:41:22 -0000	1.132
+++ squid3/src/HttpHeader.cc	29 May 2007 13:31:37 -0000	1.133
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHeader.cc,v 1.132 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHeader.cc,v 1.133 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 55    HTTP Header
  * AUTHOR: Alex Rousskov
@@ -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);
@@ -458,7 +458,7 @@
         if (e->id != HDR_OTHER)
             delById(e->id);
         else
-            delByName(e->name.c_str());
+            delByName(e->name.buf());
 
         addEntry(e->clone());
     }
@@ -565,7 +565,7 @@
         }
 
         if (e->id == HDR_CONTENT_LENGTH && (e2 = findEntry(e->id)) != NULL) {
-            if (e->value.compare(e2->value) != 0) {
+            if (e->value.cmp(e2->value.buf()) != 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) << "}");
@@ -575,12 +575,12 @@
                     goto reset;
                 }
 
-                if (!httpHeaderParseSize(e->value.c_str(), &l1)) {
-                    debugs(55, 1, "WARNING: Unparseable content-length '" << e->value << "'");
+                if (!httpHeaderParseSize(e->value.buf(), &l1)) {
+                    debugs(55, 1, "WARNING: Unparseable content-length '" << e->value.buf() << "'");
                     delete e;
                     continue;
-                } else if (!httpHeaderParseSize(e2->value.c_str(), &l2)) {
-                    debugs(55, 1, "WARNING: Unparseable content-length '" << e2->value << "'");
+                } else if (!httpHeaderParseSize(e2->value.buf(), &l2)) {
+                    debugs(55, 1, "WARNING: Unparseable content-length '" << e2->value.buf() << "'");
                     delById(e2->id);
                 } else if (l1 > l2) {
                     delById(e2->id);
@@ -602,7 +602,7 @@
             }
         }
 
-        if (e->id == HDR_OTHER && strpbrk(e->name, w_space) != NULL) {
+        if (e->id == HDR_OTHER && stringHasWhitespace(e->name.buf())) {
             debugs(55, Config.onoff.relaxed_header_parser <= 0 ? 1 : 2,
                    "WARNING: found whitespace in HTTP header name {" << 
                    getStringPrefix(field_start, field_end) << "}");
@@ -725,7 +725,7 @@
     debugs(55, 9, "deleting '" << name << "' fields in hdr " << this);
 
     while ((e = getEntry(&pos))) {
-        if (!strcasecmp(e->name,name))
+        if (!e->name.caseCmp(name))
             delAt(pos, count);
         else
             CBIT_SET(mask, e->id);
@@ -840,7 +840,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;
@@ -853,7 +853,7 @@
 
     while ((e = getEntry(&pos))) {
         if (e->id == id)
-            strListAdd(s, e->value.c_str(), ',');
+            strListAdd(s, e->value.buf(), ',');
     }
 
     /*
@@ -871,7 +871,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;
@@ -881,13 +881,13 @@
     assert(CBIT_TEST(ListHeadersMask, id));
 
     if (!CBIT_TEST(mask, id))
-        return "";
+        return String();
 
-    string s;
+    String s;
 
     while ((e = getEntry(&pos))) {
         if (e->id == id)
-            strListAdd(&s, e->value.c_str(), ',');
+            strListAdd(&s, e->value.buf(), ',');
     }
 
     /*
@@ -905,7 +905,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;
@@ -916,13 +916,13 @@
     if ((e = findEntry(id)))
         return e->value;
 
-    return "";
+    return String();
 }
 
 /*
  * Returns the value of the specified header.
  */
-string
+String
 HttpHeader::getByName(const char *name) const
 {
     http_hdr_type id;
@@ -937,12 +937,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 && strcasecmp(e->name,name) == 0) {
-            strListAdd(&result, e->value.c_str(), ',');
+        if (e->id == HDR_OTHER && e->name.caseCmp(name) == 0) {
+            strListAdd(&result, e->value.buf(), ',');
         }
     }
 
@@ -952,10 +952,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;
@@ -965,7 +965,7 @@
 
     header = getByName(name);
 
-    string result;
+    String result;
 
     while (strListGetItem(&header, separator, &item, &ilen, &pos)) {
         if (strncmp(item, member, mlen) == 0 && item[mlen] == '=') {
@@ -980,10 +980,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;
@@ -992,7 +992,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] == '=') {
@@ -1001,6 +1001,7 @@
         }
     }
 
+    header.clean();
     return result;
 }
 
@@ -1164,7 +1165,7 @@
     assert(Headers[id].type == ftDate_1123);	/* must be of an appropriate type */
 
     if ((e = findEntry(id))) {
-        value = parse_rfc1123(e->value.c_str());
+        value = parse_rfc1123(e->value.buf());
         httpHeaderNoteParsedEntry(e->id, e->value, value < 0);
     }
 
@@ -1181,7 +1182,7 @@
 
     if ((e = findEntry(id))) {
         httpHeaderNoteParsedEntry(e->id, e->value, 0);	/* no errors are possible */
-        return e->value.c_str();
+        return e->value.buf();
     }
 
     return NULL;
@@ -1197,7 +1198,7 @@
 
     if ((e = findLastEntry(id))) {
         httpHeaderNoteParsedEntry(e->id, e->value, 0);	/* no errors are possible */
-        return e->value.c_str();
+        return e->value.buf();
     }
 
     return NULL;
@@ -1207,7 +1208,7 @@
 HttpHeader::getCc() const
 {
     HttpHdrCc *cc;
-    string s;
+    String s;
 
     if (!CBIT_TEST(mask, HDR_CACHE_CONTROL))
         return NULL;
@@ -1254,7 +1255,7 @@
     if (!CBIT_TEST(mask, HDR_SURROGATE_CONTROL))
         return NULL;
 
-    string s;
+    String s;
    
     (void) getList(HDR_SURROGATE_CONTROL, &s);
 
@@ -1277,7 +1278,7 @@
     HttpHeaderEntry *e;
 
     if ((e = findEntry(HDR_CONTENT_RANGE))) {
-        cr = httpHdrContRangeParseCreate(e->value.c_str());
+        cr = httpHdrContRangeParseCreate(e->value.buf());
         httpHeaderNoteParsedEntry(e->id, e->value, !cr);
     }
 
@@ -1323,7 +1324,7 @@
     assert(Headers[id].type == ftETag);		/* must be of an appropriate type */
 
     if ((e = findEntry(id)))
-        etagParseInit(&etag, e->value.c_str());
+        etagParseInit(&etag, e->value.buf());
 
     return etag;
 }
@@ -1337,7 +1338,7 @@
     memset(&tot, 0, sizeof(tot));
 
     if ((e = findEntry(id))) {
-        const char *str = e->value.c_str();
+        const char *str = e->value.buf();
         /* try as an ETag */
 
         if (etagParseInit(&tot.tag, str)) {
@@ -1373,13 +1374,19 @@
 
     Headers[id].stat.aliveCount++;
 
-    debugs(55, 9, "created HttpHeaderEntry " << this << ": '" << name << " : " << value);
+    debugs(55, 9, "created HttpHeaderEntry " << this << ": '" << name.buf() << " : " << value.buf());
 }
 
 HttpHeaderEntry::~HttpHeaderEntry()
 {
     assert_eid(id);
-    debugs(55, 9, "destroying entry " << this << ": '" << name << ": " << value << "'");
+    debugs(55, 9, "destroying entry " << this << ": '" << name.buf() << ": " << value.buf() << "'");
+    /* clean name if needed */
+
+    if (id == HDR_OTHER)
+        name.clean();
+
+    value.clean();
 
     assert(Headers[id].stat.aliveCount);
 
@@ -1429,9 +1436,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;
@@ -1453,10 +1460,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 << "' header of " << (field_end - value_start) << " bytes");
+        debugs(55, 1, "WARNING: ignoring '" << name.buf() << "' header of " << (field_end - value_start) << " bytes");
 
         if (id == HDR_OTHER)
-            name.clear();
+            name.clean();
 
         return NULL;
     }
@@ -1468,24 +1475,24 @@
 
     Headers[id].stat.aliveCount++;
 
-    debugs(55, 9, "parsed HttpHeaderEntry: '" << name << ": " << value << "'");
+    debugs(55, 9, "parsed HttpHeaderEntry: '" << name.buf() << ": " << value.buf() << "'");
 
-    return new HttpHeaderEntry(id, name.c_str(), value.c_str());
+    return new HttpHeaderEntry(id, name.buf(), value.buf());
 }
 
 HttpHeaderEntry *
 HttpHeaderEntry::clone() const
 {
-    return new HttpHeaderEntry(id, name.c_str(), value.c_str());
+    return new HttpHeaderEntry(id, name.buf(), value.buf());
 }
 
 void
 HttpHeaderEntry::packInto(Packer * p) const
 {
     assert(p);
-    packerAppend(p, name.c_str(), name.size());
+    packerAppend(p, name.buf(), name.size());
     packerAppend(p, ": ", 2);
-    packerAppend(p, value.c_str(), value.size());
+    packerAppend(p, value.buf(), value.size());
     packerAppend(p, "\r\n", 2);
 }
 
@@ -1495,7 +1502,7 @@
     assert_eid (id);
     assert (Headers[id].type == ftInt);
     int val = -1;
-    int ok = httpHeaderParseInt(value.c_str(), &val);
+    int ok = httpHeaderParseInt(value.buf(), &val);
     httpHeaderNoteParsedEntry(id, value, !ok);
     /* XXX: Should we check ok - ie
      * return ok ? -1 : value;
@@ -1504,13 +1511,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 << ": " << context << "'");
+        debugs(55, 2, "cannot parse hdr field: '" << Headers[id].name.buf() << ": " << context.buf() << "'");
     }
 }
 
@@ -1527,7 +1534,7 @@
 {
     const int id = (int) val;
     const int valid_id = id >= 0 && id < HDR_ENUM_END;
-    const char *name = valid_id ? Headers[id].name.c_str() : "INVALID";
+    const char *name = valid_id ? Headers[id].name.buf() : "INVALID";
     int visible = count > 0;
     /* for entries with zero count, list only those that belong to current type of message */
 
@@ -1605,7 +1612,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.c_str(), f->stat.aliveCount,
+                          f->id, f->name.buf(), f->stat.aliveCount,
                           xpercent(f->stat.errCount, f->stat.parsCount),
                           xpercent(f->stat.repCount, f->stat.seenCount));
     }
@@ -1618,15 +1625,15 @@
 }
 
 http_hdr_type
-httpHeaderIdByName(const char *name, unsigned int name_len, const HttpHeaderFieldInfo * info, int end)
+httpHeaderIdByName(const char *name, int name_len, const HttpHeaderFieldInfo * info, int end)
 {
     int i;
 
     for (i = 0; i < end; ++i) {
-        if (name_len >= 0 && name_len != (unsigned int)info[i].name.size())
+        if (name_len >= 0 && name_len != info[i].name.size())
             continue;
 
-        if (!strncasecmp(name, info[i].name,
+        if (!strncasecmp(name, info[i].name.buf(),
                          name_len < 0 ? info[i].name.size() + 1 : name_len))
             return info[i].id;
     }
@@ -1651,7 +1658,7 @@
 
     assert(id >= 0 && id < HDR_ENUM_END);
 
-    return Headers[id].name.c_str();
+    return Headers[id].name.buf();
 }
 
 int
@@ -1665,7 +1672,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
@@ -1689,7 +1696,7 @@
 
     assert(name);
 
-    string header (getByName(name));
+    String header (getByName(name));
 
     while (strListGetItem(&header, separator, &item, &ilen, &pos)) {
         if (strncmp(item, member, mlen) == 0
@@ -1707,9 +1714,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;
         /*
@@ -1723,7 +1730,7 @@
 
         int headers_deleted = 0;
         while ((e = getEntry(&pos))) {
-            if (strListIsMember(&strConnection, e->name.c_str(), ','))
+            if (strListIsMember(&strConnection, e->name.buf(), ','))
                 delAt(pos, headers_deleted);
         }
         if (headers_deleted)
Index: squid3/src/HttpHeader.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHeader.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- squid3/src/HttpHeader.h	18 May 2007 06:41:22 -0000	1.20
+++ squid3/src/HttpHeader.h	29 May 2007 13:31:37 -0000	1.21
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHeader.h,v 1.20 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHeader.h,v 1.21 2007/05/29 13:31:37 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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)
@@ -211,12 +211,12 @@
     void refreshMask();
     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);
@@ -258,7 +258,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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHeaderRange.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- squid3/src/HttpHeaderRange.h	18 May 2007 06:41:22 -0000	1.9
+++ squid3/src/HttpHeaderRange.h	29 May 2007 13:31:37 -0000	1.10
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHeaderRange.h,v 1.9 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHeaderRange.h,v 1.10 2007/05/29 13:31:37 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpHeaderTools.cc,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- squid3/src/HttpHeaderTools.cc	18 May 2007 06:41:22 -0000	1.60
+++ squid3/src/HttpHeaderTools.cc	29 May 2007 13:31:37 -0000	1.61
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpHeaderTools.cc,v 1.60 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpHeaderTools.cc,v 1.61 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 66    HTTP Header Tools
  * AUTHOR: Alex Rousskov
@@ -75,7 +75,7 @@
     int i;
 
     for (i = 0; i < count; ++i)
-        table[i].name.clear();
+        table[i].name.clean();
 
     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,12 +177,14 @@
 
     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;
@@ -201,7 +203,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;
@@ -217,7 +219,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);
 
@@ -241,7 +243,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] = {
@@ -258,7 +260,7 @@
         else
             (*pos)++;
     } else {
-        *pos = str->c_str();
+        *pos = str->buf();
 
         if (!*pos)
             return 0;
@@ -347,10 +349,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->clear();
+    val->clean();
     assert (*start == '"');
     pos = start + 1;
 
Index: squid3/src/HttpReply.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpReply.cc,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -r1.94 -r1.95
--- squid3/src/HttpReply.cc	22 May 2007 16:37:26 -0000	1.94
+++ squid3/src/HttpReply.cc	29 May 2007 13:31:37 -0000	1.95
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpReply.cc,v 1.94 2007/05/22 16:37:26 rousskov Exp $
+ * $Id: HttpReply.cc,v 1.95 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 58    HTTP Reply (Response)
  * AUTHOR: Alex Rousskov
@@ -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.clear();
+        content_type = String();
 
     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,7 +278,9 @@
 
     two = otherRep->header.getStrOrList(HDR_ETAG);
 
-    if (one.empty() || two.empty() || strcasecmp (one, two)) {
+    if (!one.buf() || !two.buf() || strcasecmp (one.buf(), two.buf())) {
+        one.clean();
+        two.clean();
         return 0;
     }
 
@@ -290,9 +292,9 @@
 
     two = otherRep->header.getStrOrList(HDR_CONTENT_MD5);
 
-    if (one.empty() || two.empty() || strcasecmp (one, two)) {
-        one.clear();
-        two.clear();
+    if (!one.buf() || !two.buf() || strcasecmp (one.buf(), two.buf())) {
+        one.clean();
+        two.clean();
         return 0;
     }
 
@@ -381,7 +383,7 @@
     if (str)
         content_type.limitInit(str, strcspn(str, ";\t "));
     else
-        content_type = "";
+        content_type = String();
 
     /* be sure to set expires after date and cache-control */
     expires = hdrExpirationTime();
@@ -391,7 +393,7 @@
 void
 HttpReply::hdrCacheClean()
 {
-    content_type.clear();
+    content_type.clean();
 
     if (cache_control) {
         httpHdrCcDestroy(cache_control);
@@ -433,8 +435,8 @@
 
 bool HttpReply::sanityCheckStartLine(MemBuf *buf, http_status *error)
 {
-    if (buf->contentSize() >= protoPrefix.size() && protoPrefix.compare(buf->content(), protoPrefix.size()) != 0) {
-        debugs(58, 3, "HttpReply::sanityCheckStartLine: missing protocol prefix (" << protoPrefix << ") in '" << buf->content() << "'");
+    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() << "'");
         *error = HTTP_INVALID_HEADER;
         return false;
     }
Index: squid3/src/HttpReply.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpReply.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- squid3/src/HttpReply.h	18 May 2007 06:41:22 -0000	1.19
+++ squid3/src/HttpReply.h	29 May 2007 13:31:37 -0000	1.20
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpReply.h,v 1.19 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpReply.h,v 1.20 2007/05/29 13:31:37 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpRequest.cc,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- squid3/src/HttpRequest.cc	18 May 2007 06:41:22 -0000	1.75
+++ squid3/src/HttpRequest.cc	29 May 2007 13:31:37 -0000	1.76
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpRequest.cc,v 1.75 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpRequest.cc,v 1.76 2007/05/29 13:31:37 amosjeffries Exp $
  *
  * DEBUG: section 73    HTTP Request
  * AUTHOR: Duane Wessels
@@ -70,7 +70,7 @@
 {
     method = METHOD_NONE;
     protocol = PROTO_NONE;
-    urlpath.clear();
+    urlpath = NULL;
     login[0] = '\0';
     host[0] = '\0';
     auth_user_request = NULL;
@@ -112,7 +112,7 @@
 
     safe_free(vary_headers);
 
-    urlpath.clear();
+    urlpath.clean();
 
     header.clean();
 
@@ -126,13 +126,13 @@
         range = NULL;
     }
 
-    tag.clear();
+    tag.clean();
 
-    extacl_user.clear();
+    extacl_user.clean();
 
-    extacl_passwd.clear();
+    extacl_passwd.clean();
 
-    extacl_log.clear();
+    extacl_log.clean();
 }
 
 void
@@ -240,7 +240,7 @@
     assert(p);
     /* pack request-line */
     packerPrintf(p, "%s %s HTTP/1.0\r\n",
-                 RequestMethodStr[method], urlpath.c_str());
+                 RequestMethodStr[method], urlpath.buf());
     /* headers */
     header.packInto(p);
     /* trailer */
@@ -272,12 +272,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.c_str(), ','))
+    if (strConn && strListIsMember(strConn, e->name.buf(), ','))
         return 0;
 
     return 1;
@@ -351,7 +351,7 @@
         return urlCanonical((HttpRequest*)this);
 
     if (urlpath.size())
-        return urlpath.c_str();
+        return urlpath.buf();
 
     return "/";
 }
Index: squid3/src/HttpRequest.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpRequest.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- squid3/src/HttpRequest.h	18 May 2007 06:41:22 -0000	1.28
+++ squid3/src/HttpRequest.h	29 May 2007 13:31:38 -0000	1.29
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpRequest.h,v 1.28 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpRequest.h,v 1.29 2007/05/29 13:31:38 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpStatusLine.cc,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- squid3/src/HttpStatusLine.cc	18 May 2007 06:41:22 -0000	1.33
+++ squid3/src/HttpStatusLine.cc	29 May 2007 13:31:38 -0000	1.34
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpStatusLine.cc,v 1.33 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpStatusLine.cc,v 1.34 2007/05/29 13:31:38 amosjeffries Exp $
  *
  * DEBUG: section 57    HTTP Status-line
  * AUTHOR: Alex Rousskov
@@ -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 (strncasecmp(protoPrefix,start, protoPrefix.size()) != 0)
+    if (protoPrefix.caseCmp(start, protoPrefix.size()) != 0)
         return 0;
 
     start += protoPrefix.size();
Index: squid3/src/HttpStatusLine.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/HttpStatusLine.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/HttpStatusLine.h	18 May 2007 06:41:22 -0000	1.3
+++ squid3/src/HttpStatusLine.h	29 May 2007 13:31:38 -0000	1.4
@@ -1,6 +1,6 @@
 
 /*
- * $Id: HttpStatusLine.h,v 1.3 2007/05/18 06:41:22 amosjeffries Exp $
+ * $Id: HttpStatusLine.h,v 1.4 2007/05/29 13:31:38 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/Makefile.am,v
retrieving revision 1.181
retrieving revision 1.182
diff -u -r1.181 -r1.182
--- squid3/src/Makefile.am	18 May 2007 06:41:22 -0000	1.181
+++ squid3/src/Makefile.am	29 May 2007 13:31:38 -0000	1.182
@@ -1,7 +1,7 @@
 #
 #  Makefile for the Squid Object Cache server
 #
-#  $Id: Makefile.am,v 1.181 2007/05/18 06:41:22 amosjeffries Exp $
+#  $Id: Makefile.am,v 1.182 2007/05/29 13:31:38 amosjeffries Exp $
 #
 #  Uncomment and customize the following to suit your needs:
 #
@@ -556,7 +556,7 @@
 	$(SSL_SOURCE) \
 	stat.cc \
 	StatHist.cc \
-	SqString.cc \
+	String.cc \
 	stmem.cc \
 	stmem.h \
 	store.cc \
@@ -626,8 +626,7 @@
 	MemBuf.h \
 	Store.cci \
 	StoreEntryStream.h \
-	SqString.cci \
-	SqString.h \
+	String.cci \
 	SquidString.h \
 	SquidTime.h
 
@@ -734,7 +733,7 @@
 	StoreMetaUnpacker.cc \
 	StoreMetaURL.cc \
 	StoreMetaVary.cc \
-	SqString.cc \
+	String.cc \
 	time.cc \
 	ufsdump.cc \
 	url.cc \
@@ -1096,7 +1095,6 @@
 	globals.cc
 
 check_PROGRAMS+= \
-	tests/testString \
 	tests/testAuth \
 	tests/testACLMaxUserIP \
 	tests/testBoilerplate \
@@ -1108,6 +1106,7 @@
 	tests/test_http_range \
 	tests/testHttpRequest \
 	tests/testStore \
+	tests/testString \
 	tests/testURL \
 	@STORE_TESTS@
 
@@ -1115,7 +1114,7 @@
 	authenticate.cc \
 	ConfigParser.cc \
 	tests/stub_acl.cc tests/stub_cache_cf.cc \
-	tests/stub_helper.cc cbdata.cc SqString.cc \
+	tests/stub_helper.cc cbdata.cc String.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 \
@@ -1133,7 +1132,7 @@
 	URLScheme.cc \
 	wordlist.cc
 ##	acl.cc cache_cf.cc tools.cc \
-##	helper.cc SqString.cc cbdata.cc HttpHeaderTools.cc store.cc cache_manager.cc \
+##	helper.cc String.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
 
@@ -1169,7 +1168,7 @@
 ##	HttpHdrScTarget.cc \
 ##	Packer.cc \
 ##	StatHist.cc \
-##	SqString.cc \
+##	String.cc \
 tests_testACLMaxUserIP_SOURCES= \
 	acl.cc \
 	ACLChecklist.cc \
@@ -1194,7 +1193,7 @@
 	Parsing.cc \
 	StatHist.cc \
 	stmem.cc \
-	SqString.cc \
+	String.cc \
 	tests/stub_cache_cf.cc \
 	tests/stub_comm.cc \
 	tests/stub_DelayId.cc \
@@ -1242,7 +1241,7 @@
 	HttpRequest.cc \
 	HttpRequestMethod.cc \
 	mem.cc \
-	SqString.cc \
+	String.cc \
 	tests/testCacheManager.cc \
 	tests/testCacheManager.h \
 	tests/testMain.cc \
@@ -1406,7 +1405,7 @@
 	HttpRequestMethod.cc \
 	mem.cc \
 	RemovalPolicy.cc \
-	SqString.cc \
+	String.cc \
 	tests/CapturingStoreEntry.h \
 	tests/testEvent.cc \
 	tests/testEvent.h \
@@ -1558,7 +1557,7 @@
 	HttpRequestMethod.cc \
 	mem.cc \
 	RemovalPolicy.cc \
-	SqString.cc \
+	String.cc \
 	tests/testEventLoop.cc \
 	tests/testEventLoop.h \
 	tests/testMain.cc \
@@ -1846,7 +1845,7 @@
 	StoreMetaURL.cc \
 	StoreMetaVary.cc \
 	StoreSwapLogData.cc \
-	SqString.cc \
+	String.cc \
 	SwapDir.cc \
 	time.cc \
 	tools.cc \
@@ -1888,7 +1887,7 @@
 	HttpRequest.cc \
 	HttpRequestMethod.cc \
 	mem.cc \
-	SqString.cc \
+	String.cc \
 	tests/testHttpRequest.h \
 	tests/testHttpRequest.cc \
 	tests/testHttpRequestMethod.h \
@@ -2055,7 +2054,7 @@
 	SwapDir.cc \
 	authenticate.cc \
 	tests/stub_acl.cc tests/stub_cache_cf.cc \
-	tests/stub_helper.cc cbdata.cc SqString.cc \
+	tests/stub_helper.cc cbdata.cc String.cc \
 	tests/stub_comm.cc \
 	tests/stub_client_side_request.cc \
 	tests/stub_http.cc \
@@ -2108,10 +2107,11 @@
 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 \
-	SqString.cc \
+	String.cc \
 	tests/testMain.cc \
 	tests/testString.cc \
 	tests/testString.h \
@@ -2223,7 +2223,7 @@
 	HttpRequestMethod.cc \
 	mem.cc \
 	RemovalPolicy.cc \
-	SqString.cc \
+	String.cc \
 	tests/testURL.cc \
 	tests/testURL.h \
 	tests/testURLScheme.cc \
Index: squid3/src/MemObject.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/MemObject.cc,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- squid3/src/MemObject.cc	18 May 2007 06:41:23 -0000	1.27
+++ squid3/src/MemObject.cc	29 May 2007 13:31:38 -0000	1.28
@@ -1,6 +1,6 @@
 
 /*
- * $Id: MemObject.cc,v 1.27 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: MemObject.cc,v 1.28 2007/05/29 13:31:38 amosjeffries Exp $
  *
  * DEBUG: section 19    Store Memory Primitives
  * AUTHOR: Robert Collins
@@ -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 ? log_url : "(NULL)") );
+    debugs(20, 1, "MemObject->log_url: " << log_url << " " << checkNullString(log_url));
 }
 
 HttpReply const *
Index: squid3/src/PeerDigest.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/PeerDigest.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- squid3/src/PeerDigest.h	18 May 2007 06:41:23 -0000	1.2
+++ squid3/src/PeerDigest.h	29 May 2007 13:31:38 -0000	1.3
@@ -1,6 +1,6 @@
 
 /*
- * $Id: PeerDigest.h,v 1.2 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: PeerDigest.h,v 1.3 2007/05/29 13:31:38 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
--- squid3/src/SqString.cc	Tue May 29 13:53:29 2007
+++ /dev/null	Tue May 29 13:53:29 2007
@@ -1,404 +0,0 @@
-
-/*
- * $Id: SqString.cc,v 1.7 2007/05/22 01:15:55 hno Exp $
- *
- * 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)
-{
-    size_t bsz;
-    PROF_start(StringInitBuf);
-    clear();
-    assert(sz < 65536);
-    buf_ = (char *)memAllocString(sz, &bsz);
-    assert(bsz < 65536);
-    assert(bsz >= sz);
-    size_ = bsz;
-    PROF_stop(StringInitBuf);
-}
-
-void
-SqString::limitInit(const char *str, unsigned 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));
-
-    operator=(old);
-#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 +1) < size_) {
-        operator[](len_+len) = '\0';
-        xmemcpy(buf_+len_, str, len);
-        len_ += len;
-    } else {
-        size_t ssz = len_ + len;
-        size_t bsz = len_ + len + 1;
-        char* tmp = (char *)memAllocString(bsz, &bsz);
-        assert(bsz < 65536);
-        assert(bsz > ssz);
-
-        if (buf_)
-            xmemcpy(tmp, buf_, len_);
-
-        if (len)
-            xmemcpy(tmp + len_, str, len);
-
-        tmp[ssz] = '\0';
-
-        clear();
-
-        size_ = bsz;
-        len_ = ssz;
-        buf_ = tmp;
-        tmp = NULL;
-    }
-    PROF_stop(StringAppend);
-}
-
-void
-SqString::append(char const *str)
-{
-    if(!str) return;
-    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.size());
-}
-
-const char&
-SqString::operator [](unsigned int pos) const
-{
-    assert(pos < size_ );
-
-    return buf_[pos];
-}
-
-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 <class C>
-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
--- squid3/src/SqString.cci	Tue May 29 13:53:29 2007
+++ /dev/null	Tue May 29 13:53:29 2007
@@ -1,163 +0,0 @@
-
-/*
- * $Id: SqString.cci,v 1.2 2007/05/19 06:49:12 amosjeffries Exp $
- *
- * 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());
-}
-
-void
-SqString::set (char const *loc, char const ch)
-{
-    operator[](loc-buf_) = ch;
-}
-
-void
-SqString::cut (size_t newLength)
-{
-    operator[](newLength) = '\0';
-    len_ = newLength;
-}
-
-void
-SqString::cutPointer (char const *loc)
-{
-    operator[](loc-buf_) = '\0';
-    len_ = loc-buf_;
-}
--- squid3/src/SqString.h	Tue May 29 13:53:29 2007
+++ /dev/null	Tue May 29 13:53:29 2007
@@ -1,156 +0,0 @@
-
-/*
- * $Id: SqString.h,v 1.3 2007/05/20 08:29:44 amosjeffries Exp $
- *
- * 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<SqString const *>::SPLAYWALKEE Stater;
-
-    Splay<SqString const *> 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;
-
-    const char& operator [](unsigned int) 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, unsigned 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
===================================================================
RCS file: /cvsroot/squid/squid3/src/SquidString.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- squid3/src/SquidString.h	18 May 2007 06:41:23 -0000	1.9
+++ squid3/src/SquidString.h	29 May 2007 13:31:38 -0000	1.10
@@ -1,9 +1,9 @@
 
 /*
- * $Id: SquidString.h,v 1.9 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: SquidString.h,v 1.10 2007/05/29 13:31:38 amosjeffries Exp $
  *
  * DEBUG: section 67    String
- * AUTHOR: Duane Wessels, Amos Jeffries
+ * AUTHOR: Duane Wessels
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  * ----------------------------------------------------------
@@ -33,68 +33,113 @@
  *
  */
 
-/**
- *
- *  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
 
-    /* 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                       */
+/* 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 *);
+
+private:
+    static OBJH Stat;
 
-#include "SqString.h"
-typedef SqString string;
+    static StringRegistry Instance_;
 
+    static SplayNode<String const *>::SPLAYWALKEE Stater;
 
-    /* Overload standard C functions using the basic string API */
+    Splay<String const *> 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
+{
 
-inline std::ostream& operator <<(std::ostream &os, const string &s) { os << s.c_str(); return os; }
+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
 
 #endif /* SQUID_STRING_H */
+
+
Index: squid3/src/Store.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/Store.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- squid3/src/Store.h	18 May 2007 06:41:23 -0000	1.34
+++ squid3/src/Store.h	29 May 2007 13:31:38 -0000	1.35
@@ -1,6 +1,6 @@
 
 /*
- * $Id: Store.h,v 1.34 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: Store.h,v 1.35 2007/05/29 13:31:38 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/StoreHashIndex.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/StoreHashIndex.h	18 May 2007 06:41:23 -0000	1.3
+++ squid3/src/StoreHashIndex.h	29 May 2007 13:31:38 -0000	1.4
@@ -1,6 +1,6 @@
 
 /*
- * $Id: StoreHashIndex.h,v 1.3 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: StoreHashIndex.h,v 1.4 2007/05/29 13:31:38 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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 */
--- /dev/null	Tue May 29 13:53:29 2007
+++ squid3/src/String.cc	Tue May 29 13:53:29 2007
@@ -0,0 +1,413 @@
+
+/*
+ * $Id: String.cc,v 1.26 2007/05/29 13:31:38 amosjeffries Exp $
+ *
+ * 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 <class C>
+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
--- /dev/null	Tue May 29 13:53:29 2007
+++ squid3/src/String.cci	Tue May 29 13:53:29 2007
@@ -0,0 +1,169 @@
+
+/*
+ * $Id: String.cci,v 1.9 2007/05/29 13:31:38 amosjeffries Exp $
+ *
+ * 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
===================================================================
RCS file: /cvsroot/squid/squid3/src/SwapDir.cc,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- squid3/src/SwapDir.cc	18 May 2007 06:41:23 -0000	1.12
+++ squid3/src/SwapDir.cc	29 May 2007 13:31:38 -0000	1.13
@@ -1,6 +1,6 @@
 
 /*
- * $Id: SwapDir.cc,v 1.12 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: SwapDir.cc,v 1.13 2007/05/29 13:31:38 amosjeffries Exp $
  *
  * DEBUG: section 20    Swap Dir base object
  * AUTHOR: Robert Collins
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/SwapDir.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- squid3/src/SwapDir.h	18 May 2007 06:41:23 -0000	1.12
+++ squid3/src/SwapDir.h	29 May 2007 13:31:38 -0000	1.13
@@ -1,6 +1,6 @@
 
 /*
- * $Id: SwapDir.h,v 1.12 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: SwapDir.h,v 1.13 2007/05/29 13:31:38 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/access_log.cc,v
retrieving revision 1.125
retrieving revision 1.126
diff -u -r1.125 -r1.126
--- squid3/src/access_log.cc	18 May 2007 06:41:23 -0000	1.125
+++ squid3/src/access_log.cc	29 May 2007 13:31:38 -0000	1.126
@@ -1,6 +1,6 @@
 
 /*
- * $Id: access_log.cc,v 1.125 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: access_log.cc,v 1.126 2007/05/29 13:31:38 amosjeffries Exp $
  *
  * DEBUG: section 46    Access Log
  * AUTHOR: Duane Wessels
@@ -518,7 +518,7 @@
     logformat_token *fmt;
     static MemBuf mb;
     char tmp[1024];
-    string sb;
+    String sb;
 
     mb.reset();
 
@@ -628,7 +628,7 @@
             if (al->request)
                 sb = al->request->header.getByName(fmt->data.header.header);
 
-            out = sb.c_str();
+            out = sb.buf();
 
             quote = 1;
 
@@ -638,7 +638,7 @@
             if (al->reply)
                 sb = al->reply->header.getByName(fmt->data.header.header);
 
-            out = sb.c_str();
+            out = sb.buf();
 
             quote = 1;
 
@@ -648,7 +648,7 @@
             if (al->request)
                 sb = al->request->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator);
 
-            out = sb.c_str();
+            out = sb.buf();
 
             quote = 1;
 
@@ -658,7 +658,7 @@
             if (al->reply)
                 sb = al->reply->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator);
 
-            out = sb.c_str();
+            out = sb.buf();
 
             quote = 1;
 
@@ -767,7 +767,7 @@
 
         case LFT_REQUEST_URLPATH:
 	    if (al->request) {
-		out = al->request->urlpath.c_str();
+		out = al->request->urlpath.buf();
 		quote = 1;
 	    }
             break;
@@ -813,7 +813,7 @@
 
         case LFT_TAG:
             if (al->request)
-                out = al->request->tag.c_str();
+                out = al->request->tag.buf();
 
             quote = 1;
 
@@ -821,7 +821,7 @@
 
         case LFT_EXT_LOG:
             if (al->request)
-                out = al->request->extacl_log.c_str();
+                out = al->request->extacl_log.buf();
 
             quote = 1;
 
@@ -891,7 +891,7 @@
         if (fmt->space)
             mb.append(" ", 1);
 
-        sb.clear();
+        sb.clean();
 
         if (dofree)
             safe_free(out);
@@ -1631,8 +1631,8 @@
 static void
 fvdbInit(void)
 {
-    via_table = hash_create((HASHCMP *) std::strcmp, 977, hash4);
-    forw_table = hash_create((HASHCMP *) std::strcmp, 977, hash4);
+    via_table = hash_create((HASHCMP *) strcmp, 977, hash4);
+    forw_table = hash_create((HASHCMP *) strcmp, 977, hash4);
 }
 
 static void
@@ -1717,10 +1717,10 @@
 {
     hashFreeItems(via_table, fvdbFreeEntry);
     hashFreeMemory(via_table);
-    via_table = hash_create((HASHCMP *) std::strcmp, 977, hash4);
+    via_table = hash_create((HASHCMP *) strcmp, 977, hash4);
     hashFreeItems(forw_table, fvdbFreeEntry);
     hashFreeMemory(forw_table);
-    forw_table = hash_create((HASHCMP *) std::strcmp, 977, hash4);
+    forw_table = hash_create((HASHCMP *) strcmp, 977, hash4);
 }
 
 #endif
Index: squid3/src/cache_cf.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/cache_cf.cc,v
retrieving revision 1.511
retrieving revision 1.512
diff -u -r1.511 -r1.512
--- squid3/src/cache_cf.cc	18 May 2007 06:41:23 -0000	1.511
+++ squid3/src/cache_cf.cc	29 May 2007 13:31:38 -0000	1.512
@@ -1,6 +1,6 @@
 
 /*
- * $Id: cache_cf.cc,v 1.511 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: cache_cf.cc,v 1.512 2007/05/29 13:31:38 amosjeffries Exp $
  *
  * DEBUG: section 3     Configuration File Parsing
  * AUTHOR: Harvest Derived
@@ -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 = token;
+    var->reset(token);
 }
 
 static void
Index: squid3/src/client_db.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/client_db.cc,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -r1.69 -r1.70
--- squid3/src/client_db.cc	18 May 2007 06:41:23 -0000	1.69
+++ squid3/src/client_db.cc	29 May 2007 13:31:39 -0000	1.70
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_db.cc,v 1.69 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: client_db.cc,v 1.70 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 0     Client Database
  * AUTHOR: Duane Wessels
@@ -80,7 +80,7 @@
     if (client_table)
         return;
 
-    client_table = hash_create((HASHCMP *) std::strcmp, CLIENT_DB_HASH_SIZE, hash_string);
+    client_table = hash_create((HASHCMP *) strcmp, CLIENT_DB_HASH_SIZE, hash_string);
 }
 
 void
Index: squid3/src/client_side.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/client_side.cc,v
retrieving revision 1.755
retrieving revision 1.756
diff -u -r1.755 -r1.756
--- squid3/src/client_side.cc	18 May 2007 18:30:41 -0000	1.755
+++ squid3/src/client_side.cc	29 May 2007 13:31:39 -0000	1.756
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side.cc,v 1.755 2007/05/18 18:30:41 wessels Exp $
+ * $Id: client_side.cc,v 1.756 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 33    Client-side Routines
  * AUTHOR: Duane Wessels
@@ -459,7 +459,7 @@
     aLogEntry->http.version = request->http_ver;
     aLogEntry->hier = request->hier;
 
-    aLogEntry->cache.extuser = request->extacl_user.c_str();
+    aLogEntry->cache.extuser = request->extacl_user.buf();
 
     if (request->auth_user_request) {
 
@@ -481,10 +481,10 @@
 
         if (al.reply) {
             al.http.code = al.reply->sline.status;
-            al.http.content_type = al.reply->content_type.c_str();
+            al.http.content_type = al.reply->content_type.buf();
         } 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.c_str();
+            al.http.content_type = loggingEntry()->mem_obj->getReply()->content_type.buf();
         }
 
         debugs(33, 9, "clientLogRequest: http.code='" << al.http.code << "'");
@@ -541,7 +541,7 @@
     safe_free(uri);
     safe_free(log_uri);
     safe_free(redirect.location);
-    range_iter.boundary.clear();
+    range_iter.boundary.clean();
     HTTPMSGUNLOCK(request);
 
     if (client_stream.tail)
@@ -823,15 +823,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.c_str());
+    mb->Printf("\r\n--%s--\r\n", boundary.buf());
     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;
@@ -839,9 +839,10 @@
     assert(spec);
 
     /* put boundary */
-    debugs(33, 5, "clientPackRangeHdr: appending boundary: " << boundary);
+    debugs(33, 5, "clientPackRangeHdr: appending boundary: " <<
+           boundary.buf());
     /* rfc2046 requires to _prepend_ boundary with <crlf>! */
-    mb->Printf("\r\n--%s\r\n", boundary.c_str());
+    mb->Printf("\r\n--%s\r\n", boundary.buf());
 
     /* stuff the header with required entries and pack it */
 
@@ -1033,12 +1034,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));
@@ -1150,7 +1151,7 @@
             hdr->delById(HDR_CONTENT_TYPE);
             httpHeaderPutStrf(hdr, HDR_CONTENT_TYPE,
                               "multipart/byteranges; boundary=\"%s\"",
-                              http->range_iter.boundary.c_str());
+                              http->range_iter.boundary.buf());
             /* Content-Length is not required in multipart responses
              * but it is always nice to have one */
             actual_clen = http->mRangeCLen();
@@ -2183,11 +2184,11 @@
     request->flags.tproxy = conn->port->tproxy;
 #endif
 
-    if (internalCheck(request->urlpath.c_str())) {
+    if (internalCheck(request->urlpath.buf())) {
         if (internalHostnameIs(request->host) &&
                 request->port == getMyPort()) {
             http->flags.internal = 1;
-        } else if (Config.onoff.global_internal_static && internalStaticCheck(request->urlpath.c_str())) {
+        } else if (Config.onoff.global_internal_static && internalStaticCheck(request->urlpath.buf())) {
             xstrncpy(request->host, internalHostname(),
                      SQUIDHOSTNAMELEN);
             request->port = getMyPort();
Index: squid3/src/client_side_reply.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/client_side_reply.cc,v
retrieving revision 1.128
retrieving revision 1.129
diff -u -r1.128 -r1.129
--- squid3/src/client_side_reply.cc	18 May 2007 18:30:41 -0000	1.128
+++ squid3/src/client_side_reply.cc	29 May 2007 13:31:39 -0000	1.129
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side_reply.cc,v 1.128 2007/05/18 18:30:41 wessels Exp $
+ * $Id: client_side_reply.cc,v 1.129 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 88    Client-side Reply Routines
  * AUTHOR: Robert Collins (Originally Duane Wessels in client_side.c)
@@ -1262,7 +1262,7 @@
         int headers_deleted = 0;
         while ((e = hdr->getEntry(&pos))) {
             if (e->id == HDR_WWW_AUTHENTICATE || e->id == HDR_PROXY_AUTHENTICATE) {
-                const char *value = e->value.c_str();
+                const char *value = e->value.buf();
 
                 if ((strncasecmp(value, "NTLM", 4) == 0 &&
                         (value[4] == '\0' || value[4] == ' '))
@@ -1314,7 +1314,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,
@@ -1322,7 +1322,7 @@
                  ThisCache);
         strListAdd(&strVia, bbuf, ',');
         hdr->delById(HDR_VIA);
-        hdr->putStr(HDR_VIA, strVia.c_str());
+        hdr->putStr(HDR_VIA, strVia.buf());
     }
     /* Signal keep-alive if needed */
     hdr->putStr(http->flags.accel ? HDR_CONNECTION : HDR_PROXY_CONNECTION,
Index: squid3/src/client_side_request.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/client_side_request.cc,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -r1.88 -r1.89
--- squid3/src/client_side_request.cc	26 May 2007 06:38:04 -0000	1.88
+++ squid3/src/client_side_request.cc	29 May 2007 13:31:39 -0000	1.89
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side_request.cc,v 1.88 2007/05/26 06:38:04 wessels Exp $
+ * $Id: client_side_request.cc,v 1.89 2007/05/29 13:31:39 amosjeffries Exp $
  * 
  * DEBUG: section 85    Client-side Request Routines
  * AUTHOR: Robert Collins (Originally Duane Wessels in client_side.c)
@@ -628,10 +628,12 @@
 #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)
@@ -710,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
@@ -724,11 +726,11 @@
         }
 
 #if FORW_VIA_DB
-        fvdbCountVia(s.c_str());
+        fvdbCountVia(s.buf());
 
 #endif
 
-        s.clear();
+        s.clean();
     }
 
 #if USE_USERAGENT_LOG
@@ -745,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.c_str());
-        s.clear();
+        String s = req_hdr->getList(HDR_X_FORWARDED_FOR);
+        fvdbCountForw(s.buf());
+        s.clean();
     }
 
 #endif
Index: squid3/src/client_side_request.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/client_side_request.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- squid3/src/client_side_request.h	18 May 2007 06:41:23 -0000	1.29
+++ squid3/src/client_side_request.h	29 May 2007 13:31:39 -0000	1.30
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side_request.h,v 1.29 2007/05/18 06:41:23 amosjeffries Exp $
+ * $Id: client_side_request.h,v 1.30 2007/05/29 13:31:39 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -75,7 +75,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
===================================================================
RCS file: /cvsroot/squid/squid3/src/dns_internal.cc,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -r1.99 -r1.100
--- squid3/src/dns_internal.cc	18 May 2007 06:41:24 -0000	1.99
+++ squid3/src/dns_internal.cc	29 May 2007 13:31:39 -0000	1.100
@@ -1,6 +1,6 @@
 
 /*
- * $Id: dns_internal.cc,v 1.99 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: dns_internal.cc,v 1.100 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 78    DNS lookups; interacts with lib/rfc1035.c
  * AUTHOR: Duane Wessels
@@ -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 *) std::strcmp, 103, hash_string);
+        idns_lookup_hash = hash_create((HASHCMP *) strcmp, 103, hash_string);
         init++;
     }
 }
Index: squid3/src/errorpage.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/errorpage.cc,v
retrieving revision 1.226
retrieving revision 1.227
diff -u -r1.226 -r1.227
--- squid3/src/errorpage.cc	18 May 2007 06:41:24 -0000	1.226
+++ squid3/src/errorpage.cc	29 May 2007 13:31:39 -0000	1.227
@@ -1,6 +1,6 @@
 
 /*
- * $Id: errorpage.cc,v 1.226 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: errorpage.cc,v 1.227 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 4     Error Generation
  * AUTHOR: Duane Wessels
@@ -534,7 +534,7 @@
         Packer p;
         str.Printf("%s %s HTTP/%d.%d\n",
                    RequestMethodStr[r->method],
-                   r->urlpath.size() ? r->urlpath.c_str() : "/",
+                   r->urlpath.size() ? r->urlpath.buf() : "/",
                    r->http_ver.major, r->http_ver.minor);
         packerToMemInit(&p, &str);
         r->header.packInto(&p);
@@ -739,7 +739,7 @@
             Packer p;
             mb.Printf("%s %s HTTP/%d.%d\n",
                       RequestMethodStr[r->method],
-                      r->urlpath.size() ? r->urlpath.c_str() : "/",
+                      r->urlpath.size() ? r->urlpath.buf() : "/",
                       r->http_ver.major, r->http_ver.minor);
             packerToMemInit(&p, &mb);
             r->header.packInto(&p);
Index: squid3/src/external_acl.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/external_acl.cc,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- squid3/src/external_acl.cc	22 May 2007 01:16:40 -0000	1.79
+++ squid3/src/external_acl.cc	29 May 2007 13:31:39 -0000	1.80
@@ -1,6 +1,6 @@
 
 /*
- * $Id: external_acl.cc,v 1.79 2007/05/22 01:16:40 hno Exp $
+ * $Id: external_acl.cc,v 1.80 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 82    External ACL
  * AUTHOR: Henrik Nordstrom, MARA Systems AB
@@ -693,7 +693,7 @@
 
     external_acl_cache_touch(acl->def, entry);
     result = entry->result;
-    external_acl_message = entry->message.c_str();
+    external_acl_message = entry->message.buf();
 
     debugs(82, 2, "aclMatchExternal: " << acl->def->name << " = " << result);
 
@@ -763,7 +763,7 @@
 
     for (format = acl_data->def->format; format; format = format->next) {
         const char *str = NULL;
-        string sb;
+        String sb;
 
         switch (format->type) {
 
@@ -820,7 +820,7 @@
             break;
 
         case _external_acl_format::EXT_ACL_PATH:
-            str = request->urlpath.c_str();
+            str = request->urlpath.buf();
             break;
 
         case _external_acl_format::EXT_ACL_METHOD:
@@ -829,22 +829,22 @@
 
         case _external_acl_format::EXT_ACL_HEADER:
             sb = request->header.getByName(format->header);
-            str = sb.c_str();
+            str = sb.buf();
             break;
 
         case _external_acl_format::EXT_ACL_HEADER_ID:
             sb = request->header.getStrOrList(format->header_id);
-            str = sb.c_str();
+            str = sb.buf();
             break;
 
         case _external_acl_format::EXT_ACL_HEADER_MEMBER:
             sb = request->header.getByNameListMember(format->header, format->member, format->separator);
-            str = sb.c_str();
+            str = sb.buf();
             break;
 
         case _external_acl_format::EXT_ACL_HEADER_ID_MEMBER:
             sb = request->header.getListMember(format->header_id, format->member, format->separator);
-            str = sb.c_str();
+            str = sb.buf();
             break;
 #if USE_SSL
 
@@ -894,7 +894,7 @@
 #endif
 
         case _external_acl_format::EXT_ACL_EXT_USER:
-            str = request->extacl_user.c_str();
+            str = request->extacl_user.buf();
             break;
 
         case _external_acl_format::EXT_ACL_UNKNOWN:
@@ -921,7 +921,7 @@
             strwordquote(&mb, str);
         }
 
-        sb.clear();
+        sb.clean();
 
         first = 0;
     }
@@ -1244,8 +1244,8 @@
         if (entry != NULL) {
             debugs(82, 4, "externalAclLookup: entry = { date=" <<
                    (long unsigned int) entry->date << ", result=" <<
-                   entry->result << ", user=" << entry->user << " tag=" <<
-                   entry->tag << " log=" << entry->log << " }");
+                   entry->result << ", user=" << entry->user.buf() << " tag=" <<
+                   entry->tag.buf() << " log=" << entry->log.buf() << " }");
 
         }
 
@@ -1278,7 +1278,7 @@
 
     for (p = Config.externalAclHelperList; p; p = p->next) {
         if (!p->cache)
-            p->cache = hash_create((HASHCMP *) std::strcmp, hashPrime(1024), hash4);
+            p->cache = hash_create((HASHCMP *) strcmp, hashPrime(1024), hash4);
 
         if (!p->theHelper)
             p->theHelper = helperCreate(p->name);
Index: squid3/src/fqdncache.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/fqdncache.cc,v
retrieving revision 1.172
retrieving revision 1.173
diff -u -r1.172 -r1.173
--- squid3/src/fqdncache.cc	18 May 2007 06:41:24 -0000	1.172
+++ squid3/src/fqdncache.cc	29 May 2007 13:31:39 -0000	1.173
@@ -1,6 +1,6 @@
 
 /*
- * $Id: fqdncache.cc,v 1.172 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: fqdncache.cc,v 1.173 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 35    FQDN Cache
  * AUTHOR: Harvest Derived
@@ -527,7 +527,7 @@
 
     n = hashPrime(fqdncache_high / 4);
 
-    fqdn_table = hash_create((HASHCMP *) std::strcmp, n, hash4);
+    fqdn_table = hash_create((HASHCMP *) strcmp, n, hash4);
 
     memDataInit(MEM_FQDNCACHE_ENTRY, "fqdncache_entry",
                 sizeof(fqdncache_entry), 0);
Index: squid3/src/ftp.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ftp.cc,v
retrieving revision 1.423
retrieving revision 1.424
diff -u -r1.423 -r1.424
--- squid3/src/ftp.cc	18 May 2007 06:41:24 -0000	1.423
+++ squid3/src/ftp.cc	29 May 2007 13:31:39 -0000	1.424
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ftp.cc,v 1.423 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: ftp.cc,v 1.424 2007/05/29 13:31:39 amosjeffries Exp $
  *
  * DEBUG: section 9     File Transfer Protocol (FTP)
  * AUTHOR: Harvest Derived
@@ -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;
@@ -441,9 +441,9 @@
 
     safe_free(old_filepath);
 
-    title_url.clear();
+    title_url.clean();
 
-    base_href.clear();
+    base_href.clean();
 
     safe_free(filepath);
 
@@ -507,7 +507,7 @@
     wordlist *w;
     char *dirup;
     int i, j, k;
-    const char *title = title_url.c_str();
+    const char *title = title_url.buf();
     flags.listing_started = true;
     printfReplyBody("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n");
     printfReplyBody("<!-- HTML listing generated by Squid %s -->\n",
@@ -526,7 +526,7 @@
 
     if (flags.need_base_href)
         printfReplyBody("<BASE HREF=\"%s\">\n",
-                        html_quote(base_href.c_str()));
+                        html_quote(base_href.buf()));
 
     printfReplyBody("</HEAD><BODY>\n");
 
@@ -955,7 +955,7 @@
             if (flags.dir_slash) {
                 url = xstrdup("./");
             } else {
-                const char *title = title_url.c_str();
+                const char *title = title_url.buf();
                 int k = 6 + strcspn(&title[6], "/");
                 char *t;
                 url = xstrdup(title + k);
@@ -1436,11 +1436,11 @@
         flags.isdir = 1;
         flags.root_dir = 1;
         flags.need_base_href = 1;	/* Work around broken browsers */
-    } else if (!request->urlpath.compare("/%2f/")) {
+    } else if (!request->urlpath.cmp("/%2f/")) {
         /* UNIX root directory */
         flags.isdir = 1;
         flags.root_dir = 1;
-    } else if ((l >= 1) && (*(request->urlpath.c_str() + l - 1) == '/')) {
+    } else if ((l >= 1) && (*(request->urlpath.buf() + l - 1) == '/')) {
         /* Directory URL, ending in / */
         flags.isdir = 1;
 
@@ -1528,7 +1528,7 @@
     checkUrlpath();
     buildTitleUrl();
     debugs(9, 5, "ftpStart: host=" << request->host << ", path=" <<
-           request->urlpath << ", user=" << user << ", passwd=" <<
+           request->urlpath.buf() << ", user=" << user << ", passwd=" <<
            password);
 
     state = BEGIN;
@@ -1953,7 +1953,7 @@
             mode = 'A';
         } else {
             t = ftpState->request->urlpath.rpos('/');
-            filename = t ? t + 1 : ftpState->request->urlpath.c_str();
+            filename = t ? t + 1 : ftpState->request->urlpath.buf();
             mode = mimeGetTransferMode(filename);
         }
 
@@ -1981,7 +1981,7 @@
     debugs(9, 3, "This is ftpReadType");
 
     if (code == 200) {
-        p = path = xstrdup(ftpState->request->urlpath.c_str());
+        p = path = xstrdup(ftpState->request->urlpath.buf());
 
         if (*p == '/')
             p++;
@@ -2202,7 +2202,7 @@
         if (ftpState->size == 0) {
             debugs(9, 2, "ftpReadSize: SIZE reported " <<
                    ftpState->ctrl.last_reply << " on " <<
-                   ftpState->title_url);
+                   ftpState->title_url.buf());
 
             ftpState->size = -1;
         }
@@ -2908,7 +2908,7 @@
     safe_free(ftpState->filepath);
 
     /* Build the new path (urlpath begins with /) */
-    path = xstrdup(ftpState->request->urlpath.c_str());
+    path = xstrdup(ftpState->request->urlpath.buf());
 
     rfc1738_unescape(path);
 
@@ -2959,7 +2959,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 */
-            strncasecmp(ftpState->request->urlpath, "/%2f", 4) != 0) {	/* No slash encoded */
+            ftpState->request->urlpath.caseCmp("/%2f", 4) != 0) {	/* No slash encoded */
 
         switch (ftpState->state) {
 
@@ -3118,7 +3118,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;
@@ -3139,7 +3139,7 @@
 
     e->buffer();	/* released when done processing current data payload */
 
-    filename = (t = urlpath.rpos('/')) ? t + 1 : urlpath.c_str();
+    filename = (t = urlpath.rpos('/')) ? t + 1 : urlpath.buf();
 
     if (flags.isdir) {
         mime_type = "text/html";
@@ -3272,7 +3272,7 @@
              request->host,
              portbuf,
              "/%2f",
-             request->urlpath.c_str());
+             request->urlpath.buf());
 
     if ((t = strchr(buf, '?')))
         *t = '\0';
Index: squid3/src/gopher.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/gopher.cc,v
retrieving revision 1.208
retrieving revision 1.209
diff -u -r1.208 -r1.209
--- squid3/src/gopher.cc	23 May 2007 21:10:06 -0000	1.208
+++ squid3/src/gopher.cc	29 May 2007 13:31:40 -0000	1.209
@@ -1,6 +1,6 @@
 
 /*
- * $Id: gopher.cc,v 1.208 2007/05/23 21:10:06 hno Exp $
+ * $Id: gopher.cc,v 1.209 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 10    Gopher
  * AUTHOR: Harvest Derived
@@ -230,7 +230,7 @@
 static void
 gopher_request_parse(const HttpRequest * req, char *type_id, char *request)
 {
-    const char *path = req->urlpath.c_str();
+    const char *path = req->urlpath.buf();
 
     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.c_str(), outbuf.size());
+        entry->append(outbuf.buf(), outbuf.size());
         /* now let start sending stuff to client */
         entry->flush();
     }
 
-    outbuf.clear();
+    outbuf.clean();
     return;
 }
 
Index: squid3/src/http.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/http.cc,v
retrieving revision 1.522
retrieving revision 1.523
diff -u -r1.522 -r1.523
--- squid3/src/http.cc	18 May 2007 06:41:24 -0000	1.522
+++ squid3/src/http.cc	29 May 2007 13:31:40 -0000	1.523
@@ -1,6 +1,6 @@
 
 /*
- * $Id: http.cc,v 1.522 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: http.cc,v 1.523 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 11    Hypertext Transfer Protocol (HTTP)
  * AUTHOR: Harvest Derived
@@ -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.c_str();
+            url = orig_request->urlpath.buf();
         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.clear();
+        s.clean();
 
         if (no_cache) {
             if (!REFRESH_OVERRIDE(ignore_no_cache))
@@ -584,14 +584,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.clear();
+    vstr.clean();
     vary = reply->header.getList(HDR_VARY);
 
     while (strListGetItem(&vary, ',', &item, &ilen, &pos)) {
@@ -602,14 +602,14 @@
         if (strcmp(name, "*") == 0) {
             /* Can not handle "Vary: *" withtout ETag support */
             safe_free(name);
-            vstr.clear();
+            vstr.clean();
             break;
         }
 
         strListAdd(&vstr, name, ',');
         hdr = request->header.getByName(name);
         safe_free(name);
-        value = hdr.c_str();
+        value = hdr.buf();
 
         if (value) {
             value = rfc1738_escape_part(value);
@@ -618,10 +618,10 @@
             vstr.append("\"", 1);
         }
 
-        hdr.clear();
+        hdr.clean();
     }
 
-    vary.clear();
+    vary.clean();
 #if X_ACCELERATOR_VARY
 
     pos = NULL;
@@ -634,7 +634,7 @@
         strListAdd(&vstr, name, ',');
         hdr = request->header.getByName(name);
         safe_free(name);
-        value = hdr.c_str();
+        value = hdr.buf();
 
         if (value) {
             value = rfc1738_escape_part(value);
@@ -643,14 +643,14 @@
             vstr.append("\"", 1);
         }
 
-        hdr.clear();
+        hdr.clean();
     }
 
-    vary.clear();
+    vary.clean();
 #endif
 
-    debugs(11, 3, "httpMakeVaryMark: " << vstr);
-    return vstr.c_str();
+    debugs(11, 3, "httpMakeVaryMark: " << vstr.buf());
+    return vstr.buf();
 }
 
 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.c_str());
-        strVia.clear();
+        hdr_out->putStr(HDR_VIA, strVia.buf());
+        strVia.clean();
     }
 
 #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.c_str());
+        hdr_out->putStr(HDR_SURROGATE_CAPABILITY, strSurrogate.buf());
     }
 #endif
 
@@ -1419,9 +1419,9 @@
     else
         strListAdd(&strFwd, "unknown", ',');
 
-    hdr_out->putStr(HDR_X_FORWARDED_FOR, strFwd.c_str());
+    hdr_out->putStr(HDR_X_FORWARDED_FOR, strFwd.buf());
 
-    strFwd.clear();
+    strFwd.clean();
 
     /* 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.c_str();
+                username = orig_request->extacl_user.buf();
 
             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.c_str(), orig_request->extacl_passwd.c_str());
+                snprintf(loginbuf, sizeof(loginbuf), "%s:%s", orig_request->extacl_user.buf(), orig_request->extacl_passwd.buf());
                 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.c_str(), orig_request->extacl_passwd.c_str());
+                snprintf(loginbuf, sizeof(loginbuf), "%s:%s", orig_request->extacl_user.buf(), orig_request->extacl_passwd.buf());
                 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.c_str();
+                username = orig_request->extacl_user.buf();
 
             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.c_str()));
+                assert(strstr(url, request->urlpath.buf()));
         }
 
         /* 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.clear();
+    strConnection.clean();
 }
 
 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 << ": " << e->value);
+    debugs(11, 5, "httpBuildRequestHeader: " << e->name.buf() << ": " << e->value.buf());
 
     if (!httpRequestHdrAllowed(e, &strConnection)) {
-        debugs(11, 2, "'" << e->name << "' header denied by anonymize_headers configuration");
+        debugs(11, 2, "'" << e->name.buf() << "' 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.c_str() : "/",
+               request->urlpath.size() ? request->urlpath.buf() : "/",
                httpver.major,httpver.minor);
     /* build and pack headers */
     {
Index: squid3/src/ident.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ident.cc,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -r1.76 -r1.77
--- squid3/src/ident.cc	18 May 2007 06:41:24 -0000	1.76
+++ squid3/src/ident.cc	29 May 2007 13:31:40 -0000	1.77
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ident.cc,v 1.76 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: ident.cc,v 1.77 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 30    Ident (RFC 931)
  * AUTHOR: Duane Wessels
@@ -270,7 +270,7 @@
 void
 identInit(void)
 {
-    ident_hash = hash_create((HASHCMP *) std::strcmp,
+    ident_hash = hash_create((HASHCMP *) strcmp,
                              hashPrime(Squid_MaxFD / 8),
                              hash4);
 }
Index: squid3/src/internal.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/internal.cc,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- squid3/src/internal.cc	18 May 2007 06:41:24 -0000	1.46
+++ squid3/src/internal.cc	29 May 2007 13:31:40 -0000	1.47
@@ -1,6 +1,6 @@
 
 /*
- * $Id: internal.cc,v 1.46 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: internal.cc,v 1.47 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 76    Internal Squid Object handling
  * AUTHOR: Duane, Alex, Henrik
@@ -50,7 +50,7 @@
 internalStart(HttpRequest * request, StoreEntry * entry)
 {
     ErrorState *err;
-    const char *upath = request->urlpath.c_str();
+    const char *upath = request->urlpath.buf();
     debugs(76, 3, "internalStart: " << inet_ntoa(request->client_addr) << " requesting '" << upath << "'");
 
     if (0 == strcmp(upath, "/squid-internal-dynamic/netdb")) {
Index: squid3/src/ipcache.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ipcache.cc,v
retrieving revision 1.260
retrieving revision 1.261
diff -u -r1.260 -r1.261
--- squid3/src/ipcache.cc	18 May 2007 06:41:24 -0000	1.260
+++ squid3/src/ipcache.cc	29 May 2007 13:31:40 -0000	1.261
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ipcache.cc,v 1.260 2007/05/18 06:41:24 amosjeffries Exp $
+ * $Id: ipcache.cc,v 1.261 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 14    IP Cache
  * AUTHOR: Harvest Derived
@@ -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 *) std::strcmp, n, hash4);
+    ip_table = hash_create((HASHCMP *) strcmp, n, hash4);
     memDataInit(MEM_IPCACHE_ENTRY, "ipcache_entry", sizeof(ipcache_entry), 0);
 }
 
Index: squid3/src/net_db.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/net_db.cc,v
retrieving revision 1.195
retrieving revision 1.196
diff -u -r1.195 -r1.196
--- squid3/src/net_db.cc	18 May 2007 06:41:25 -0000	1.195
+++ squid3/src/net_db.cc	29 May 2007 13:31:40 -0000	1.196
@@ -1,6 +1,6 @@
 
 /*
- * $Id: net_db.cc,v 1.195 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: net_db.cc,v 1.196 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 38    Network Measurement Database
  * AUTHOR: Duane Wessels
@@ -892,11 +892,11 @@
 
     n = hashPrime(Config.Netdb.high / 4);
 
-    addr_table = hash_create((HASHCMP *) std::strcmp, n, hash_string);
+    addr_table = hash_create((HASHCMP *) strcmp, n, hash_string);
 
     n = hashPrime(3 * Config.Netdb.high / 4);
 
-    host_table = hash_create((HASHCMP *) std::strcmp, n, hash_string);
+    host_table = hash_create((HASHCMP *) strcmp, n, hash_string);
 
     eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600.0, 1);
 
Index: squid3/src/pconn.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/pconn.cc,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- squid3/src/pconn.cc	18 May 2007 06:41:25 -0000	1.52
+++ squid3/src/pconn.cc	29 May 2007 13:31:40 -0000	1.53
@@ -1,6 +1,6 @@
 
 /*
- * $Id: pconn.cc,v 1.52 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: pconn.cc,v 1.53 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 48    Persistent Connections
  * AUTHOR: Duane Wessels
@@ -217,7 +217,7 @@
 PconnPool::PconnPool(const char *aDescr) : table(NULL), descr(aDescr)
 {
     int i;
-    table = hash_create((HASHCMP *) std::strcmp, 229, hash_string);
+    table = hash_create((HASHCMP *) strcmp, 229, hash_string);
 
     for (i = 0; i < PCONN_HIST_SZ; i++)
         hist[i] = 0;
Index: squid3/src/peer_digest.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/peer_digest.cc,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -r1.124 -r1.125
--- squid3/src/peer_digest.cc	18 May 2007 06:41:25 -0000	1.124
+++ squid3/src/peer_digest.cc	29 May 2007 13:31:40 -0000	1.125
@@ -1,6 +1,6 @@
 
 /*
- * $Id: peer_digest.cc,v 1.124 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: peer_digest.cc,v 1.125 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 72    Peer Digest Routines
  * AUTHOR: Alex Rousskov
@@ -112,7 +112,7 @@
     if (pd->cd)
         cacheDigestDestroy(pd->cd);
 
-    pd->host.clear();
+    pd->host.clean();
 }
 
 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 << " in " << delay << " secs");
+    debugs(72, 3, "peerDigestSetCheck: will check peer " << pd->host.buf() << " in " << delay << " secs");
 }
 
 /*
@@ -241,10 +241,10 @@
 peerDigestNotePeerGone(PeerDigest * pd)
 {
     if (pd->flags.requested) {
-        debugs(72, 2, "peerDigest: peer " << pd->host << " gone, will destroy after fetch.");
+        debugs(72, 2, "peerDigest: peer " << pd->host.buf() << " gone, will destroy after fetch.");
         /* do nothing now, the fetching chain will notice and take action */
     } else {
-        debugs(72, 2, "peerDigest: peer " << pd->host << " is gone, destroying now.");
+        debugs(72, 2, "peerDigest: peer " << pd->host.buf() << " 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 <<
+        debugs(72, 2, "peerDigestCheck: " << pd->host.buf() <<
                ", 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 <<
+        debugs(72, 2, "peerDigestCheck: " << pd->host.buf() <<
                ", 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 << " status: " << status << 
+        debugs(72, 3, "peerDigestFetchReply: " << pd->host.buf() << " 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 <<
+            debugs(72, 1, "peerDigestSwapInHeaders: " << fetch->pd->host.buf() <<
                    " status " << fetch->entry->getReply()->sline.status <<
                    " got cached!");
 
@@ -764,7 +764,7 @@
 #endif
 
         else
-            host = pd->host.c_str();
+            host = pd->host.buf();
     }
 
     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 << ", reason: " << reason);
+    debugs(72, 2, "peerDigestFetchStop: peer " << fetch->pd->host.buf() << ", 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 << ", reason: " << reason);
+    debugs(72, 2, "peerDigestFetchAbort: peer " << fetch->pd->host.buf() << ", 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.c_str();
+    const char *host = pd->host.buf();
 
     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.c_str();
+    const char *host = pd->host.buf();
 
     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 <<
+        debugs(72, 0, "Warning: " << pd->host.buf() <<
                " peer digest has too many bits on (" << bit_util << "%%).");
 
         return 0;
@@ -1108,7 +1108,7 @@
 
     assert(pd);
 
-    const char *host = pd->host.c_str();
+    const char *host = pd->host.buf();
     storeAppendPrintf(e, "\npeer digest from %s\n", host);
 
     cacheDigestGuessStatsReport(&pd->stats.guess, e, host);
Index: squid3/src/protos.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/protos.h,v
retrieving revision 1.546
retrieving revision 1.547
diff -u -r1.546 -r1.547
--- squid3/src/protos.h	23 May 2007 21:10:07 -0000	1.546
+++ squid3/src/protos.h	29 May 2007 13:31:40 -0000	1.547
@@ -1,6 +1,6 @@
 
 /*
- * $Id: protos.h,v 1.546 2007/05/23 21:10:07 hno Exp $
+ * $Id: protos.h,v 1.547 2007/05/29 13:31:40 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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, unsigned int name_len, const HttpHeaderFieldInfo * attrs, int end);
+SQUIDCEXTERN http_hdr_type httpHeaderIdByName(const char *name, 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
===================================================================
RCS file: /cvsroot/squid/squid3/src/redirect.cc,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -r1.119 -r1.120
--- squid3/src/redirect.cc	18 May 2007 06:41:25 -0000	1.119
+++ squid3/src/redirect.cc	29 May 2007 13:31:40 -0000	1.120
@@ -1,6 +1,6 @@
 
 /*
- * $Id: redirect.cc,v 1.119 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: redirect.cc,v 1.120 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 61    Redirector
  * AUTHOR: Duane Wessels
@@ -135,8 +135,8 @@
 
     if (http->request->auth_user_request)
         r->client_ident = http->request->auth_user_request->username();
-    else if (!http->request->extacl_user.empty()) {
-        r->client_ident = http->request->extacl_user.c_str();
+    else if (http->request->extacl_user.buf() != NULL) {
+        r->client_ident = http->request->extacl_user.buf();
     }
 
     if (!r->client_ident && (conn != NULL && conn->rfc931[0]))
Index: squid3/src/stat.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/stat.cc,v
retrieving revision 1.406
retrieving revision 1.407
diff -u -r1.406 -r1.407
--- squid3/src/stat.cc	18 May 2007 06:41:25 -0000	1.406
+++ squid3/src/stat.cc	29 May 2007 13:31:40 -0000	1.407
@@ -1,5 +1,5 @@
 /*
- * $Id: stat.cc,v 1.406 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: stat.cc,v 1.407 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 18    Cache Manager Statistics
  * AUTHOR: Harvest Derived
@@ -1692,8 +1692,8 @@
 
         if (http->request->auth_user_request)
             p = http->request->auth_user_request->username();
-        else if (!http->request->extacl_user.empty()) {
-            p = http->request->extacl_user.c_str();
+        else if (http->request->extacl_user.buf() != NULL) {
+            p = http->request->extacl_user.buf();
         }
 
         if (!p && (conn != NULL && conn->rfc931[0]))
Index: squid3/src/store.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/store.cc,v
retrieving revision 1.614
retrieving revision 1.615
diff -u -r1.614 -r1.615
--- squid3/src/store.cc	18 May 2007 06:41:25 -0000	1.614
+++ squid3/src/store.cc	29 May 2007 13:31:40 -0000	1.615
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store.cc,v 1.614 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: store.cc,v 1.615 2007/05/29 13:31:40 amosjeffries Exp $
  *
  * DEBUG: section 20    Storage Manager
  * AUTHOR: Harvest Derived
@@ -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.empty()) {
+            if (vary.size()) {
                 /* Again, we own this structure layout */
-                rep->header.putStr(HDR_VARY, vary.c_str());
-                vary.clear();
+                rep->header.putStr(HDR_VARY, vary.buf());
+                vary.clean();
             }
 
 #if X_ACCELERATOR_VARY
             vary = mem_obj->getReply()->header.getList(HDR_X_ACCELERATOR_VARY);
 
-            if (!vary.empty()) {
+            if (vary.buf()) {
                 /* Again, we own this structure layout */
-                rep->header.putStr(HDR_X_ACCELERATOR_VARY, vary.c_str());
-                vary.clear();
+                rep->header.putStr(HDR_X_ACCELERATOR_VARY, vary.buf());
+                vary.clean();
             }
 
 #endif
Index: squid3/src/store_dir.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/store_dir.cc,v
retrieving revision 1.160
retrieving revision 1.161
diff -u -r1.160 -r1.161
--- squid3/src/store_dir.cc	18 May 2007 06:41:25 -0000	1.160
+++ squid3/src/store_dir.cc	29 May 2007 13:31:41 -0000	1.161
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_dir.cc,v 1.160 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: store_dir.cc,v 1.161 2007/05/29 13:31:41 amosjeffries Exp $
  *
  * DEBUG: section 47    Store Directory Routines
  * AUTHOR: Duane Wessels
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/store_log.cc,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- squid3/src/store_log.cc	18 May 2007 06:41:25 -0000	1.33
+++ squid3/src/store_log.cc	29 May 2007 13:31:41 -0000	1.34
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_log.cc,v 1.33 2007/05/18 06:41:25 amosjeffries Exp $
+ * $Id: store_log.cc,v 1.34 2007/05/29 13:31:41 amosjeffries Exp $
  *
  * DEBUG: section 20    Storage Manager Logging Functions
  * AUTHOR: Duane Wessels
@@ -87,7 +87,7 @@
                       (int) reply->date,
                       (int) reply->last_modified,
                       (int) reply->expires,
-                      !reply->content_type.empty() ? reply->content_type.c_str() : "unknown",
+                      reply->content_type.size() ? reply->content_type.buf() : "unknown",
                       reply->content_length,
                       e->contentLen(),
                       RequestMethodStr[mem->method],
Index: squid3/src/structs.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/structs.h,v
retrieving revision 1.557
retrieving revision 1.558
diff -u -r1.557 -r1.558
--- squid3/src/structs.h	26 May 2007 06:38:05 -0000	1.557
+++ squid3/src/structs.h	29 May 2007 13:31:41 -0000	1.558
@@ -1,6 +1,6 @@
 
 /*
- * $Id: structs.h,v 1.557 2007/05/26 06:38:05 wessels Exp $
+ * $Id: structs.h,v 1.558 2007/05/29 13:31:41 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -843,8 +843,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 */
@@ -857,7 +857,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) */
@@ -893,7 +893,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
===================================================================
RCS file: /cvsroot/squid/squid3/src/url.cc,v
retrieving revision 1.161
retrieving revision 1.162
diff -u -r1.161 -r1.162
--- squid3/src/url.cc	23 May 2007 21:10:07 -0000	1.161
+++ squid3/src/url.cc	29 May 2007 13:31:41 -0000	1.162
@@ -1,6 +1,6 @@
 
 /*
- * $Id: url.cc,v 1.161 2007/05/23 21:10:07 hno Exp $
+ * $Id: url.cc,v 1.162 2007/05/29 13:31:41 amosjeffries Exp $
  *
  * DEBUG: section 23    URL Parsing
  * AUTHOR: Duane Wessels
@@ -236,7 +236,7 @@
     for (t = host; *t; t++)
         *t = xtolower(*t);
 
-    if (strpbrk(host, w_space) != NULL) {
+    if (stringHasWhitespace(host)) {
         if (URI_WHITESPACE_STRIP == Config.uri_whitespace) {
             t = q = host;
 
@@ -284,7 +284,7 @@
     }
 
 #endif
-    if (strpbrk(urlpath, w_space) != NULL) {
+    if (stringHasWhitespace(urlpath)) {
         debugs(23, 2, "urlParse: URI has whitespace: {" << url << "}");
 
         switch (Config.uri_whitespace) {
@@ -349,7 +349,7 @@
         return request->canonical;
 
     if (request->protocol == PROTO_URN) {
-        snprintf(urlbuf, MAX_URL, "urn:%s", request->urlpath.c_str());
+        snprintf(urlbuf, MAX_URL, "urn:%s", request->urlpath.buf());
     } else {
         switch (request->method) {
 
@@ -369,7 +369,7 @@
                      *request->login ? "@" : null_string,
                      request->host,
                      portbuf,
-                     request->urlpath.c_str());
+                     request->urlpath.buf());
 
             break;
         }
@@ -378,22 +378,6 @@
     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)
 {
@@ -403,7 +387,7 @@
     char *t;
 
     if (request->protocol == PROTO_URN) {
-        snprintf(buf, MAX_URL, "urn:%s", request->urlpath.c_str());
+        snprintf(buf, MAX_URL, "urn:%s", request->urlpath.buf());
     } else {
         switch (request->method) {
 
@@ -433,7 +417,7 @@
                      loginbuf,
                      request->host,
                      portbuf,
-                     request->urlpath.c_str());
+                     request->urlpath.buf());
             /*
              * strip arguments AFTER a question-mark
              */
Index: squid3/src/urn.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/urn.cc,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -r1.106 -r1.107
--- squid3/src/urn.cc	18 May 2007 06:41:26 -0000	1.106
+++ squid3/src/urn.cc	29 May 2007 13:31:41 -0000	1.107
@@ -1,6 +1,6 @@
 
 /*
- * $Id: urn.cc,v 1.106 2007/05/18 06:41:26 amosjeffries Exp $
+ * $Id: urn.cc,v 1.107 2007/05/29 13:31:41 amosjeffries Exp $
  *
  * DEBUG: section 52    URN Parsing
  * AUTHOR: Kostas Anagnostakis
@@ -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.c_str());
+        result = xstrdup(urlpath.buf());
         urlpath.set(t, ':');
     } else {
-        result = xstrdup(urlpath.c_str());
+        result = xstrdup(urlpath.buf());
     }
 
     return result;
@@ -193,7 +193,7 @@
 bool
 UrnState::RequestNeedsMenu(HttpRequest *r)
 {
-    return strncasecmp(r->urlpath, "menu.", 5) == 0;
+    return strncasecmp(r->urlpath.buf(), "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.c_str());
+    snprintf(local_urlres, 4096, "http://%s/uri-res/N2L?urn:%s", host, uri.buf());
     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.c_str() + 5);
+        updateRequestURL(r, r->urlpath.buf() + 5);
         flags.force_menu = 1;
     }
 
Index: squid3/src/whois.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/whois.cc,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- squid3/src/whois.cc	18 May 2007 06:41:26 -0000	1.44
+++ squid3/src/whois.cc	29 May 2007 13:31:41 -0000	1.45
@@ -1,6 +1,6 @@
 
 /*
- * $Id: whois.cc,v 1.44 2007/05/18 06:41:26 amosjeffries Exp $
+ * $Id: whois.cc,v 1.45 2007/05/29 13:31:41 amosjeffries Exp $
  *
  * DEBUG: section 75    WHOIS protocol
  * AUTHOR: Duane Wessels, Kostas Anagnostakis
@@ -100,7 +100,7 @@
 
     buf = (char *)xmalloc(l);
 
-    snprintf(buf, l, "%s\r\n", p->request->urlpath.c_str() + 1);
+    snprintf(buf, l, "%s\r\n", p->request->urlpath.buf() + 1);
 
     comm_write(fd, buf, strlen(buf), whoisWriteComplete, p, NULL);
     comm_read(fd, p->buf, BUFSIZ, whoisReadReply, p);
Index: squid3/src/DiskIO/AIO/AIODiskFile.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/DiskIO/AIO/AIODiskFile.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/DiskIO/AIO/AIODiskFile.cc	19 May 2007 05:03:48 -0000	1.5
+++ squid3/src/DiskIO/AIO/AIODiskFile.cc	29 May 2007 13:31:43 -0000	1.6
@@ -1,6 +1,6 @@
 
 /*
- * $Id: AIODiskFile.cc,v 1.5 2007/05/19 05:03:48 amosjeffries Exp $
+ * $Id: AIODiskFile.cc,v 1.6 2007/05/29 13:31:43 amosjeffries Exp $
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  * ----------------------------------------------------------
@@ -85,10 +85,10 @@
 {
     /* Simulate async calls */
 #ifdef _SQUID_WIN32_
-    fd = aio_open(path.c_str(), flags);
+    fd = aio_open(path.buf(), flags);
 #else
 
-    fd = file_open(path.c_str() , flags);
+    fd = file_open(path.buf() , flags);
 #endif
 
     ioRequestor = callback;
Index: squid3/src/DiskIO/AIO/AIODiskFile.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/DiskIO/AIO/AIODiskFile.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/DiskIO/AIO/AIODiskFile.h	18 May 2007 06:41:27 -0000	1.3
+++ squid3/src/DiskIO/AIO/AIODiskFile.h	29 May 2007 13:31:43 -0000	1.4
@@ -1,6 +1,6 @@
 
 /*
- * $Id: AIODiskFile.h,v 1.3 2007/05/18 06:41:27 amosjeffries Exp $
+ * $Id: AIODiskFile.h,v 1.4 2007/05/29 13:31:43 amosjeffries Exp $
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  * ----------------------------------------------------------
@@ -70,7 +70,7 @@
     CBDATA_CLASS(AIODiskFile);
     void error(bool const &);
     int fd;
-    string path;
+    String path;
     AIODiskIOStrategy *strategy;
     RefCount<IORequestor> ioRequestor;
     bool closed;
Index: squid3/src/ICAP/ICAPConfig.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPConfig.cc,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- squid3/src/ICAP/ICAPConfig.cc	18 May 2007 06:41:29 -0000	1.15
+++ squid3/src/ICAP/ICAPConfig.cc	29 May 2007 13:31:43 -0000	1.16
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ICAPConfig.cc,v 1.15 2007/05/18 06:41:29 amosjeffries Exp $
+ * $Id: ICAPConfig.cc,v 1.16 2007/05/29 13:31:43 amosjeffries Exp $
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  * ----------------------------------------------------------
@@ -48,7 +48,7 @@
 ICAPConfig TheICAPConfig;
 
 ICAPServiceRep::Pointer
-ICAPConfig::findService(const string& key)
+ICAPConfig::findService(const String& key)
 {
     Vector<ICAPServiceRep::Pointer>::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.clear();
+    matchedClass.clean();
 
     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 << "' has candidate service '" << service->key << "'");
+            debugs(93, 3, "ICAPAccessCheck::check: class '" << c->key.buf() << "' has candidate service '" << service->key.buf() << "'");
             candidateClasses += c->key;
         }
     }
@@ -193,7 +193,7 @@
      */
     debugs(93, 3, "ICAPAccessCheck::check: NO candidates or matches found");
 
-    matchedClass.clear();
+    matchedClass.clean();
 
     ICAPAccessCheckCallbackWrapper(1, this);
 
@@ -207,7 +207,7 @@
     ICAPAccessCheck *ac = (ICAPAccessCheck*)data;
 
     if (ac->matchedClass.size()) {
-        debugs(93, 5, "ICAPAccessCheckCallbackWrapper matchedClass = " << ac->matchedClass);
+        debugs(93, 5, "ICAPAccessCheckCallbackWrapper matchedClass = " << ac->matchedClass.buf());
     }
 
     if (!answer) {
@@ -241,7 +241,7 @@
     debugs(93, 3, "ICAPAccessCheck::do_callback");
 
     if (matchedClass.size()) {
-        debugs(93, 3, "ICAPAccessCheck::do_callback matchedClass = " << matchedClass);
+        debugs(93, 3, "ICAPAccessCheck::do_callback matchedClass = " << matchedClass.buf());
     }
 
     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.c_str(),
-                          r->methodStr(), r->vectPointStr(), r->bypass, r->uri.c_str());
+        storeAppendPrintf(entry, "%s %s_%s %s %d %s\n", name, r->key.buf(),
+                          r->methodStr(), r->vectPointStr(), r->bypass, r->uri.buf());
     }
 };
 
@@ -380,7 +380,7 @@
     Vector<ICAPClass*>::iterator i = classes.begin();
 
     while (i != classes.end()) {
-        storeAppendPrintf(entry, "%s %s\n", name, (*i)->key.c_str());
+        storeAppendPrintf(entry, "%s %s\n", name, (*i)->key.buf());
         ++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.c_str(), config_lineno);
+               aKey.buf(), config_lineno);
 
     aclParseAccessLine(parser, &theClass->accessList);
 };
@@ -413,7 +413,7 @@
     Vector<ICAPClass*>::iterator i = classes.begin();
 
     while (i != classes.end()) {
-        snprintf(nom, 64, "%s %s", name, (*i)->key.c_str());
+        snprintf(nom, 64, "%s %s", name, (*i)->key.buf());
         dump_acl_access(entry, nom, (*i)->accessList);
         ++i;
     }
Index: squid3/src/ICAP/ICAPConfig.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPConfig.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- squid3/src/ICAP/ICAPConfig.h	18 May 2007 06:41:29 -0000	1.12
+++ squid3/src/ICAP/ICAPConfig.h	29 May 2007 13:31:44 -0000	1.13
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ICAPConfig.h,v 1.12 2007/05/18 06:41:29 amosjeffries Exp $
+ * $Id: ICAPConfig.h,v 1.13 2007/05/29 13:31:44 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -47,7 +47,7 @@
 {
 
 public:
-    string key;
+    String key;
     acl_access *accessList;
 
     Vector<ICAPServiceRep::Pointer> services;
@@ -73,8 +73,8 @@
     ICAPAccessCheckCallback *callback;
     void *callback_data;
     ACLChecklist *acl_checklist;
-    Vector<string> candidateClasses;
-    string matchedClass;
+    Vector<String> 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
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPModXact.cc,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- squid3/src/ICAP/ICAPModXact.cc	18 May 2007 06:41:29 -0000	1.32
+++ squid3/src/ICAP/ICAPModXact.cc	29 May 2007 13:31:44 -0000	1.33
@@ -973,8 +973,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.c_str());
-    buf.Printf("Host: %s:%d\r\n", s.host.c_str(), s.port);
+    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("Date: %s\r\n", mkrfc1123(squid_curtime));
 
     if (!TheICAPConfig.reuse_connections)
@@ -995,7 +995,7 @@
 
     // to simplify, we could assume that request is always available
 
-    string urlPath;
+    String urlPath;
     if (request) {
         urlPath = request->urlpath;
         if (ICAP::methodRespmod == m)
@@ -1091,7 +1091,7 @@
     const HttpRequest *request = virgin.cause ?
         virgin.cause :
         dynamic_cast<const HttpRequest*>(virgin.header);
-    const string urlPath = request ? request->urlpath : "";
+    const String urlPath = request ? request->urlpath : String();
     size_t wantedSize;
     if (!service().wantsPreview(urlPath, wantedSize)) {
         debugs(93, 5, "ICAPModXact should not offer preview for " << urlPath);
Index: squid3/src/ICAP/ICAPOptXact.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPOptXact.cc,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- squid3/src/ICAP/ICAPOptXact.cc	18 May 2007 06:41:29 -0000	1.7
+++ squid3/src/ICAP/ICAPOptXact.cc	29 May 2007 13:31:44 -0000	1.8
@@ -42,8 +42,8 @@
 void ICAPOptXact::makeRequest(MemBuf &buf)
 {
     const ICAPServiceRep &s = service();
-    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.Printf("OPTIONS %s ICAP/1.0\r\n", s.uri.buf());
+    buf.Printf("Host: %s:%d\r\n", s.host.buf(), s.port);
     buf.append(ICAP::crlf, 2);
 }
 
Index: squid3/src/ICAP/ICAPOptions.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPOptions.cc,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- squid3/src/ICAP/ICAPOptions.cc	18 May 2007 06:41:29 -0000	1.11
+++ squid3/src/ICAP/ICAPOptions.cc	29 May 2007 13:31:44 -0000	1.12
@@ -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.empty() && xisdigit(s[0]))
-        value = atoi(s.c_str());
+    if (s.size() && xisdigit(*s.buf()))
+        value = atoi(s.buf());
     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[eOff-1] == '.' &&
-                strcmp(&urlPath[eOff], e->key) == 0) {
+            if (urlPath.buf()[eOff-1] == '.' &&
+                strcmp(urlPath.buf() + 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
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPOptions.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- squid3/src/ICAP/ICAPOptions.h	18 May 2007 06:41:29 -0000	1.10
+++ squid3/src/ICAP/ICAPOptions.h	29 May 2007 13:31:44 -0000	1.11
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ICAPOptions.h,v 1.10 2007/05/18 06:41:29 amosjeffries Exp $
+ * $Id: ICAPOptions.h,v 1.11 2007/05/29 13:31:44 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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<ICAP::Method> 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
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPServiceRep.cc,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- squid3/src/ICAP/ICAPServiceRep.cc	18 May 2007 06:41:29 -0000	1.13
+++ squid3/src/ICAP/ICAPServiceRep.cc	29 May 2007 13:31:44 -0000	1.14
@@ -80,24 +80,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 << " " << service_type << " " << bypass);
+    debugs(3, 5, "ICAPService::parseConfigLine (line " << config_lineno << "): " << key.buf() << " " << service_type << " " << bypass);
 
     method = parseMethod(service_type);
     point = parseVectPoint(service_type);
 
     debugs(3, 5, "ICAPService::parseConfigLine (line " << config_lineno << "): service is " << methodStr() << "_" << vectPointStr());
 
-    if (strncmp(uri, "icap://", 7) != 0) {
-        debugs(3, 0, "ICAPService::parseConfigLine (line " << config_lineno << "): wrong uri: " << uri);
+    if (uri.cmp("icap://", 7) != 0) {
+        debugs(3, 0, "ICAPService::parseConfigLine (line " << config_lineno << "): wrong uri: " << uri.buf());
         return false;
     }
 
-    const char *s = &uri[7];
+    const char *s = uri.buf() + 7;
 
     const char *e;
 
@@ -217,13 +217,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());
 
@@ -361,7 +361,7 @@
 
     if (!theOptions->methods.empty()) {
         bool method_found = false;
-        string method_list;
+        String method_list;
         Vector <ICAP::Method>::iterator iter = theOptions->methods.begin();
 
         while (iter != theOptions->methods.end()) {
@@ -379,8 +379,8 @@
         if (!method_found) {
             debugs(93,1, "WARNING: Squid is configured to use ICAP method " <<
                    ICAP::methodStr(method) <<
-                   " for service " << uri <<
-                   " but OPTIONS response declares the methods are " << method_list);
+                   " for service " << uri.buf() <<
+                   " but OPTIONS response declares the methods are " << method_list.buf());
         }
     }
 
@@ -393,7 +393,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);
+            " seconds: " << uri.buf());
     }
 }
 
Index: squid3/src/ICAP/ICAPServiceRep.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPServiceRep.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- squid3/src/ICAP/ICAPServiceRep.h	18 May 2007 06:41:30 -0000	1.8
+++ squid3/src/ICAP/ICAPServiceRep.h	29 May 2007 13:31:44 -0000	1.9
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ICAPServiceRep.h,v 1.8 2007/05/18 06:41:30 amosjeffries Exp $
+ * $Id: ICAPServiceRep.h,v 1.9 2007/05/29 13:31:44 amosjeffries Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPXaction.cc,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- squid3/src/ICAP/ICAPXaction.cc	22 May 2007 17:43:40 -0000	1.18
+++ squid3/src/ICAP/ICAPXaction.cc	29 May 2007 13:31:44 -0000	1.19
@@ -107,7 +107,7 @@
         disableRetries(); // this will also safely drain pconn pool
 
     // TODO: check whether NULL domain is appropriate here
-    connection = icapPconnPool->pop(s.host.c_str(), s.port, NULL, NULL, isRetriable);
+    connection = icapPconnPool->pop(s.host.buf(), s.port, NULL, NULL, isRetriable);
     if (connection >= 0) {
         debugs(93,3, HERE << "reused pconn FD " << connection);
         connector = &ICAPXaction_noteCommConnected; // make doneAll() false
@@ -123,12 +123,12 @@
     disableRetries(); // we only retry pconn failures
 
     connection = comm_open(SOCK_STREAM, 0, getOutgoingAddr(NULL), 0,
-                           COMM_NONBLOCKING, s.uri.c_str());
+        COMM_NONBLOCKING, s.uri.buf());
 
     if (connection < 0)
         dieOnConnectionFailure(); // throws
 
-    debugs(93,3, typeName << " opens connection to " << s.host << ":" << s.port);
+    debugs(93,3, typeName << " opens connection to " << s.host.buf() << ":" << s.port);
 
     commSetTimeout(connection, Config.Timeout.connect,
                    &ICAPXaction_noteCommTimedout, this);
@@ -137,7 +137,7 @@
     comm_add_close_handler(connection, closer, this);
 
     connector = &ICAPXaction_noteCommConnected;
-    commConnectStart(connection, s.host.c_str(), s.port, connector, this);
+    commConnectStart(connection, s.host.buf(), s.port, connector, this);
 }
 
 /*
@@ -171,7 +171,7 @@
         if (reuseConnection) {
             debugs(93,3, HERE << "pushing pconn" << status());
             commSetTimeout(connection, -1, NULL, NULL);
-            icapPconnPool->push(connection, theService->host.c_str(), theService->port, NULL, NULL);
+            icapPconnPool->push(connection, theService->host.buf(), theService->port, NULL, NULL);
             disableRetries();
         } else {
             debugs(93,3, HERE << "closing pconn" << status());
@@ -247,7 +247,7 @@
 
 void ICAPXaction::handleCommTimedout()
 {
-    debugs(93, 0, HERE << "ICAP FD " << connection << " timeout to " << theService->methodStr() << " " << theService->uri);
+    debugs(93, 0, HERE << "ICAP FD " << connection << " timeout to " << theService->methodStr() << " " << theService->uri.buf());
     reuseConnection = false;
     MemBuf mb;
     mb.init();
Index: squid3/src/auth/digest/auth_digest.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/auth/digest/auth_digest.cc,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- squid3/src/auth/digest/auth_digest.cc	18 May 2007 06:41:31 -0000	1.56
+++ squid3/src/auth/digest/auth_digest.cc	29 May 2007 13:31:46 -0000	1.57
@@ -1,6 +1,6 @@
 
 /*
- * $Id: auth_digest.cc,v 1.56 2007/05/18 06:41:31 amosjeffries Exp $
+ * $Id: auth_digest.cc,v 1.57 2007/05/29 13:31:46 amosjeffries Exp $
  *
  * DEBUG: section 29    Authenticator
  * AUTHOR: Robert Collins
@@ -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 *) std::strcmp, 7921, hash_string);
+        digest_nonce_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string);
         assert(digest_nonce_cache);
         eventAdd("Digest none cache maintenance", authenticateDigestNonceCacheCleanup, NULL, digestConfig.nonceGCInterval, 1);
     }
@@ -1089,7 +1089,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))
@@ -1205,7 +1205,7 @@
         }
     }
 
-    temp.clear();
+    temp.clean();
 
 
     /* now we validate the data given to us */
Index: squid3/src/auth/negotiate/auth_negotiate.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/auth/negotiate/auth_negotiate.cc,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- squid3/src/auth/negotiate/auth_negotiate.cc	18 May 2007 06:41:31 -0000	1.19
+++ squid3/src/auth/negotiate/auth_negotiate.cc	29 May 2007 13:31:46 -0000	1.20
@@ -1,6 +1,6 @@
 
 /*
- * $Id: auth_negotiate.cc,v 1.19 2007/05/18 06:41:31 amosjeffries Exp $
+ * $Id: auth_negotiate.cc,v 1.20 2007/05/29 13:31:46 amosjeffries Exp $
  *
  * DEBUG: section 29    Negotiate Authenticator
  * AUTHOR: Robert Collins, Henrik Nordstrom, Francesco Chemolli
@@ -180,7 +180,7 @@
             negotiateauthenticators = helperStatefulCreate("negotiateauthenticator");
 
         if (!proxy_auth_cache)
-            proxy_auth_cache = hash_create((HASHCMP *) std::strcmp, 7921, hash_string);
+            proxy_auth_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string);
 
         assert(proxy_auth_cache);
 
Index: squid3/src/auth/ntlm/auth_ntlm.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/auth/ntlm/auth_ntlm.cc,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -r1.69 -r1.70
--- squid3/src/auth/ntlm/auth_ntlm.cc	18 May 2007 06:41:32 -0000	1.69
+++ squid3/src/auth/ntlm/auth_ntlm.cc	29 May 2007 13:31:46 -0000	1.70
@@ -1,6 +1,6 @@
 
 /*
- * $Id: auth_ntlm.cc,v 1.69 2007/05/18 06:41:32 amosjeffries Exp $
+ * $Id: auth_ntlm.cc,v 1.70 2007/05/29 13:31:46 amosjeffries Exp $
  *
  * DEBUG: section 29    NTLM Authenticator
  * AUTHOR: Robert Collins, Henrik Nordstrom, Francesco Chemolli
@@ -181,7 +181,7 @@
             ntlmauthenticators = helperStatefulCreate("ntlmauthenticator");
 
         if (!proxy_auth_cache)
-            proxy_auth_cache = hash_create((HASHCMP *) std::strcmp, 7921, hash_string);
+            proxy_auth_cache = hash_create((HASHCMP *) strcmp, 7921, hash_string);
 
         assert(proxy_auth_cache);
 
Index: squid3/src/fs/coss/CossSwapDir.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/fs/coss/CossSwapDir.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- squid3/src/fs/coss/CossSwapDir.h	18 May 2007 06:41:32 -0000	1.7
+++ squid3/src/fs/coss/CossSwapDir.h	29 May 2007 13:31:47 -0000	1.8
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/fs/coss/store_dir_coss.cc,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -r1.74 -r1.75
--- squid3/src/fs/coss/store_dir_coss.cc	18 May 2007 06:41:32 -0000	1.74
+++ squid3/src/fs/coss/store_dir_coss.cc	29 May 2007 13:31:47 -0000	1.75
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_dir_coss.cc,v 1.74 2007/05/18 06:41:32 amosjeffries Exp $
+ * $Id: store_dir_coss.cc,v 1.75 2007/05/29 13:31:47 amosjeffries Exp $
  * vim: set et : 
  *
  * DEBUG: section 47    Store COSS Directory Routines
@@ -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<CossSwapDir *>(this)->stripe_path = xstrdup(result.c_str());
+        const_cast<CossSwapDir *>(this)->stripe_path = xstrdup(result.buf());
     }
 
     return stripe_path;
Index: squid3/src/fs/null/store_null.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/fs/null/store_null.cc,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- squid3/src/fs/null/store_null.cc	18 May 2007 06:41:32 -0000	1.13
+++ squid3/src/fs/null/store_null.cc	29 May 2007 13:31:47 -0000	1.14
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_null.cc,v 1.13 2007/05/18 06:41:32 amosjeffries Exp $
+ * $Id: store_null.cc,v 1.14 2007/05/29 13:31:47 amosjeffries Exp $
  *
  * DEBUG: section 47    Store Directory Routines
  * AUTHOR: Duane Wessels
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/fs/null/store_null.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/fs/null/store_null.h	18 May 2007 06:41:33 -0000	1.4
+++ squid3/src/fs/null/store_null.h	29 May 2007 13:31:47 -0000	1.5
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_null.h,v 1.4 2007/05/18 06:41:33 amosjeffries Exp $
+ * $Id: store_null.h,v 1.5 2007/05/29 13:31:47 amosjeffries Exp $
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  * ----------------------------------------------------------
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/fs/ufs/store_dir_ufs.cc,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -r1.83 -r1.84
--- squid3/src/fs/ufs/store_dir_ufs.cc	18 May 2007 06:41:33 -0000	1.83
+++ squid3/src/fs/ufs/store_dir_ufs.cc	29 May 2007 13:31:47 -0000	1.84
@@ -1,6 +1,6 @@
 
 /*
- * $Id: store_dir_ufs.cc,v 1.83 2007/05/18 06:41:33 amosjeffries Exp $
+ * $Id: store_dir_ufs.cc,v 1.84 2007/05/29 13:31:47 amosjeffries Exp $
  *
  * DEBUG: section 47    Store Directory Routines
  * AUTHOR: Duane Wessels
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/fs/ufs/ufscommon.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- squid3/src/fs/ufs/ufscommon.h	18 May 2007 06:41:33 -0000	1.10
+++ squid3/src/fs/ufs/ufscommon.h	29 May 2007 13:31:47 -0000	1.11
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ufscommon.h,v 1.10 2007/05/18 06:41:33 amosjeffries Exp $
+ * $Id: ufscommon.h,v 1.11 2007/05/29 13:31:47 amosjeffries Exp $
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  * ----------------------------------------------------------
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/CapturingStoreEntry.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- squid3/src/tests/CapturingStoreEntry.h	18 May 2007 06:41:33 -0000	1.2
+++ squid3/src/tests/CapturingStoreEntry.h	29 May 2007 13:31:48 -0000	1.3
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/TestSwapDir.cc,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/tests/TestSwapDir.cc	18 May 2007 06:41:33 -0000	1.4
+++ squid3/src/tests/TestSwapDir.cc	29 May 2007 13:31:48 -0000	1.5
@@ -46,7 +46,7 @@
 {}
 
 StoreSearch *
-TestSwapDir::search(string, HttpRequest *)
+TestSwapDir::search(String, HttpRequest *)
 {
     return NULL;
 }
Index: squid3/src/tests/TestSwapDir.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/TestSwapDir.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/tests/TestSwapDir.h	18 May 2007 06:41:33 -0000	1.5
+++ squid3/src/tests/TestSwapDir.h	29 May 2007 13:31:48 -0000	1.6
@@ -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<TestSwapDir> TestSwapDirPointer;
Index: squid3/src/tests/testCacheManager.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testCacheManager.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/tests/testCacheManager.cc	23 May 2007 20:59:15 -0000	1.3
+++ squid3/src/tests/testCacheManager.cc	29 May 2007 13:31:48 -0000	1.4
@@ -45,8 +45,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
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testEvent.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/tests/testEvent.cc	23 May 2007 20:59:15 -0000	1.5
+++ squid3/src/tests/testEvent.cc	29 May 2007 13:31:48 -0000	1.6
@@ -100,12 +100,13 @@
     scheduler.schedule("test event", CalledEvent::Handler, &event, 0, 0, false);
     scheduler.schedule("test event2", CalledEvent::Handler, &event2, 0, 0, false);
     scheduler.dump(anEntry);
-    string expect =          "Last event to run: last event\n"
+    CPPUNIT_ASSERT_EQUAL(String(
+                             "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";
-    CPPUNIT_ASSERT_EQUAL( expect, anEntry->_appended_text);
+                             "test event2\t0.000000 seconds\t0\tN/A\n"
+                         ), anEntry->_appended_text);
     delete anEntry;
 }
 
Index: squid3/src/tests/testHttpRequest.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testHttpRequest.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/tests/testHttpRequest.cc	23 May 2007 20:59:16 -0000	1.3
+++ squid3/src/tests/testHttpRequest.cc	29 May 2007 13:31:48 -0000	1.4
@@ -37,10 +37,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");
@@ -48,10 +48,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);
@@ -63,10 +63,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);
 }
 
@@ -83,9 +83,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
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testHttpRequestMethod.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/tests/testHttpRequestMethod.cc	18 May 2007 06:41:33 -0000	1.3
+++ squid3/src/tests/testHttpRequestMethod.cc	29 May 2007 13:31:48 -0000	1.4
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testStore.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/tests/testStore.cc	18 May 2007 06:41:33 -0000	1.5
+++ squid3/src/tests/testStore.cc	29 May 2007 13:31:48 -0000	1.6
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testStore.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/tests/testStore.h	18 May 2007 06:41:33 -0000	1.3
+++ squid3/src/tests/testStore.h	29 May 2007 13:31:48 -0000	1.4
@@ -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<TestStore> TestStorePointer;
Index: squid3/src/tests/testStoreController.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testStoreController.cc,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- squid3/src/tests/testStoreController.cc	18 May 2007 06:41:33 -0000	1.6
+++ squid3/src/tests/testStoreController.cc	29 May 2007 13:31:48 -0000	1.7
@@ -78,9 +78,10 @@
 static StoreEntry *
 addedEntry(StorePointer hashStore,
            StorePointer aStore,
-           string name,
-           string varySpec,
-           string varyKey
+           String name,
+           String varySpec,
+           String varyKey
+
           )
 {
     StoreEntry *e = new StoreEntry();
@@ -108,7 +109,7 @@
     EBIT_CLR(e->flags, KEY_PRIVATE);
     e->ping_status = PING_NONE;
     EBIT_CLR(e->flags, ENTRY_VALIDATED);
-    e->hashInsert((const cache_key *)name.c_str());	/* do it after we clear KEY_PRIVATE */
+    e->hashInsert((const cache_key *)name.buf());	/* do it after we clear KEY_PRIVATE */
     return e;
 }
 
Index: squid3/src/tests/testStoreEntryStream.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testStoreEntryStream.cc,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/tests/testStoreEntryStream.cc	23 May 2007 20:59:16 -0000	1.4
+++ squid3/src/tests/testStoreEntryStream.cc	29 May 2007 13:31:48 -0000	1.5
@@ -37,7 +37,7 @@
         stream.flush();
         CPPUNIT_ASSERT_EQUAL(1, anEntry->_buffer_calls);
         CPPUNIT_ASSERT_EQUAL(1, anEntry->_flush_calls);
-        CPPUNIT_ASSERT_EQUAL((string)"some text   !", (string)anEntry->_appended_text);
+        CPPUNIT_ASSERT_EQUAL(String("some text   !"), anEntry->_appended_text);
     }
 
     delete anEntry;
Index: squid3/src/tests/testStoreHashIndex.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testStoreHashIndex.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/tests/testStoreHashIndex.cc	18 May 2007 06:41:33 -0000	1.5
+++ squid3/src/tests/testStoreHashIndex.cc	29 May 2007 13:31:48 -0000	1.6
@@ -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.c_str());	/* do it after we clear KEY_PRIVATE */
+    e->hashInsert((const cache_key *)name.buf());	/* do it after we clear KEY_PRIVATE */
     return e;
 }
 
Index: squid3/src/tests/testString.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testString.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- squid3/src/tests/testString.cc	23 May 2007 20:59:16 -0000	1.5
+++ squid3/src/tests/testString.cc	29 May 2007 13:31:48 -0000	1.6
@@ -20,216 +20,41 @@
 }
 
 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( memcmp("hello world", cStr.c_str(), 11) == 0 );
-    CPPUNIT_ASSERT( memcmp("hello world\0", cStr.c_str(), 12) == 0 );
-    CPPUNIT_ASSERT( memcmp("hello world\0 untro", cStr.c_str(), 18) == 0 );
-    CPPUNIT_ASSERT( memcmp("hello world\0 untro\0", cStr.c_str(), 19) == 0 );
-}
-
-void
-testString::testAccess()
-{
-    string test;
-    test = "123456789a"; // to get a predictable length buffer.
-
-    CPPUNIT_ASSERT_EQUAL( test.size(), 10 );
-
-/* FIXME: flow checks do not seem to catch assert() sent from within code. */
-      /* underflow handling test: _should_ fail with core dump. */
-      /* this SHOULD be impossible due to unsigned type of parameter. */
-//    CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT( test[-1] ) );
-
-      /* overflow handling test: _should_ fail with core dump. */
-//    CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT( test[test.size()+10] ) );
-
-      /* [] access method (read and write) */
-    CPPUNIT_ASSERT( test[0]  == '1' );
-    CPPUNIT_ASSERT( test[9]  == 'a' );
-    CPPUNIT_ASSERT( test[10] == '\0' );
-
-    test.append('T');
-    CPPUNIT_ASSERT( test[10]  ==  'T' );
-    CPPUNIT_ASSERT( test[11]  == '\0' );
-    CPPUNIT_ASSERT_EQUAL((string)"123456789aT", test);
-
-      /* Random access inside buffer. */
-    test[5] = 't';
-    CPPUNIT_ASSERT( test[5]   ==  't' );
-    CPPUNIT_ASSERT( test[11]  == '\0' );
-    CPPUNIT_ASSERT_EQUAL((string)"12345t789aT", test);
-
-      /* border case at last position of string */
-    test[9] = 'E';
-    CPPUNIT_ASSERT( test[9]   ==  'E' );
-    CPPUNIT_ASSERT( test[11]  == '\0' );
-    CPPUNIT_ASSERT_EQUAL((string)"12345t789ET", test);
-
-      /* border case at EOS position */
-    test[11] = 'F';
-    CPPUNIT_ASSERT( test[11]  == 'F' );
-    CPPUNIT_ASSERT( test[12]  == '\0' );
-    CPPUNIT_ASSERT_EQUAL((string)"12345t789ETF", test);
-}
-
-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.compare(right));
-    CPPUNIT_ASSERT(!left.compare(NULL));
-    CPPUNIT_ASSERT(!left.compare(NULL, 1));
+    CPPUNIT_ASSERT(!left.cmp(right));
+    CPPUNIT_ASSERT(!left.cmp(NULL));
+    CPPUNIT_ASSERT(!left.cmp(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.compare(right));
-    CPPUNIT_ASSERT(!left.compare(NULL));
-    CPPUNIT_ASSERT(!left.compare(NULL, 1));
+    CPPUNIT_ASSERT(!left.cmp(right));
+    CPPUNIT_ASSERT(!left.cmp(NULL));
+    CPPUNIT_ASSERT(!left.cmp(NULL, 1));
     /* reverse the order to catch corners */
-    CPPUNIT_ASSERT(!right.compare(left));
-    CPPUNIT_ASSERT(!right.compare(""));
-    CPPUNIT_ASSERT(!right.compare("", 1));
+    CPPUNIT_ASSERT(!right.cmp(left));
+    CPPUNIT_ASSERT(!right.cmp(""));
+    CPPUNIT_ASSERT(!right.cmp("", 1));
 }
 
 void
 testString::testCmpNotEmptyDefault()
 {
-    string left("foo");
-    string right;
+    String left("foo");
+    String right;
     /* empty string sorts before everything */
-    CPPUNIT_ASSERT(left.compare(right) > 0);
-    CPPUNIT_ASSERT(left.compare(NULL) > 0);
-    CPPUNIT_ASSERT(left.compare(NULL, 1) > 0);
+    CPPUNIT_ASSERT(left.cmp(right) > 0);
+    CPPUNIT_ASSERT(left.cmp(NULL) > 0);
+    CPPUNIT_ASSERT(left.cmp(NULL, 1) > 0);
     /* reverse for symmetry tests */
-    CPPUNIT_ASSERT(right.compare(left) < 0);
-    CPPUNIT_ASSERT(right.compare("foo") < 0);
-    CPPUNIT_ASSERT(right.compare("foo", 1) < 0);
+    CPPUNIT_ASSERT(right.cmp(left) < 0);
+    CPPUNIT_ASSERT(right.cmp("foo") < 0);
+    CPPUNIT_ASSERT(right.cmp("foo", 1) < 0);
 }
Index: squid3/src/tests/testString.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testString.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/tests/testString.h	23 May 2007 20:59:16 -0000	1.4
+++ squid3/src/tests/testString.h	29 May 2007 13:31:48 -0000	1.5
@@ -11,36 +11,19 @@
 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( testAccess );
-    CPPUNIT_TEST( testCstrMethods );
-    CPPUNIT_TEST( testSearch );
     CPPUNIT_TEST_SUITE_END();
 
 public:
     void setUp();
 
 protected:
-
-    /* std::string API */
-    void testDefaults();
     void testCmpDefault();
     void testCmpEmptyString();
     void testCmpNotEmptyDefault();
-    void testBooleans();
-    void testAppend();
-    void testAssignments();
-    void testAccess();
-    void testCstrMethods();
-    void testSearch();
 };
 
 #endif
+
Index: squid3/src/tests/testURLScheme.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/testURLScheme.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- squid3/src/tests/testURLScheme.cc	18 May 2007 06:41:33 -0000	1.3
+++ squid3/src/tests/testURLScheme.cc	29 May 2007 13:31:48 -0000	1.4
@@ -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
===================================================================
RCS file: /cvsroot/squid/squid3/src/tests/test_http_range.cc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- squid3/src/tests/test_http_range.cc	18 May 2007 06:41:33 -0000	1.2
+++ squid3/src/tests/test_http_range.cc	29 May 2007 13:31:48 -0000	1.3
@@ -1,6 +1,6 @@
 
 /*
- * $Id: test_http_range.cc,v 1.2 2007/05/18 06:41:33 amosjeffries Exp $
+ * $Id: test_http_range.cc,v 1.3 2007/05/29 13:31:48 amosjeffries Exp $
  *
  * DEBUG: section 64    HTTP Range Header
  * AUTHOR: Alex Rousskov
@@ -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 "";
+    return String();
 }
 
 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)