]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/acl/HttpStatus.cc
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / acl / HttpStatus.cc
index 5c496d5272534ebd4ac33a578fa8ea28370f74df..4b0808b7264c3bb1ac228746b7d4f4ce38366a4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
  *
  * Squid software is distributed under GPLv2+ license and includes
  * contributions from numerous individuals and organizations.
 #include "squid.h"
 #include "acl/FilledChecklist.h"
 #include "acl/HttpStatus.h"
-#include "cache_cf.h"
 #include "Debug.h"
 #include "HttpReply.h"
 
 #include <climits>
 
-static void aclParseHTTPStatusList(SplayNode<acl_httpstatus_data *> **curlist);
+static void aclParseHTTPStatusList(Splay<acl_httpstatus_data *> **curlist);
 static int aclHTTPStatusCompare(acl_httpstatus_data * const &a, acl_httpstatus_data * const &b);
-static int aclMatchHTTPStatus(SplayNode<acl_httpstatus_data*> **dataptr, Http::StatusCode status);
+static int aclMatchHTTPStatus(Splay<acl_httpstatus_data*> **dataptr, Http::StatusCode status);
 
 acl_httpstatus_data::acl_httpstatus_data(int x) : status1(x), status2(x) { ; }
 
@@ -74,8 +73,10 @@ ACLHTTPStatus::ACLHTTPStatus (ACLHTTPStatus const & old) : data(NULL), class_ (o
 
 ACLHTTPStatus::~ACLHTTPStatus()
 {
-    if (data)
-        data->destroy(SplayNode<acl_httpstatus_data*>::DefaultFree);
+    if (data) {
+        data->destroy();
+        delete data;
+    }
 }
 
 char const *
@@ -109,21 +110,18 @@ aclParseHTTPStatusData(const char *t)
 void
 ACLHTTPStatus::parse()
 {
+    if (!data)
+        data = new Splay<acl_httpstatus_data*>();
+
     aclParseHTTPStatusList (&data);
 }
 
 void
-aclParseHTTPStatusList(SplayNode<acl_httpstatus_data *> **curlist)
+aclParseHTTPStatusList(Splay<acl_httpstatus_data *> **curlist)
 {
-    char *t = NULL;
-    SplayNode<acl_httpstatus_data*> **Top = curlist;
-    acl_httpstatus_data *q = NULL;
-
-    while ((t = strtokFile())) {
-        if ((q = aclParseHTTPStatusData(t)) == NULL)
-            continue;
-
-        *Top = (*Top)->insert(q, acl_httpstatus_data::compare);
+    while (char *t = ConfigParser::strtokFile()) {
+        if (acl_httpstatus_data *q = aclParseHTTPStatusData(t))
+            (*curlist)->insert(q, acl_httpstatus_data::compare);
     }
 }
 
@@ -134,15 +132,13 @@ ACLHTTPStatus::match(ACLChecklist *checklist)
 }
 
 int
-aclMatchHTTPStatus(SplayNode<acl_httpstatus_data*> **dataptr, const Http::StatusCode status)
+aclMatchHTTPStatus(Splay<acl_httpstatus_data*> **dataptr, const Http::StatusCode status)
 {
-
     acl_httpstatus_data X(status);
-    SplayNode<acl_httpstatus_data*> **Top = dataptr;
-    *Top = Top[0]->splay(&X, aclHTTPStatusCompare);
+    const acl_httpstatus_data * const * result = (*dataptr)->find(&X, aclHTTPStatusCompare);
 
-    debugs(28, 3, "aclMatchHTTPStatus: '" << status << "' " << (splayLastResult ? "NOT found" : "found"));
-    return (0 == splayLastResult);
+    debugs(28, 3, "aclMatchHTTPStatus: '" << status << "' " << (result ? "found" : "NOT found"));
+    return (result != NULL);
 }
 
 static int
@@ -157,18 +153,18 @@ aclHTTPStatusCompare(acl_httpstatus_data * const &a, acl_httpstatus_data * const
     return 0;
 }
 
-static void
-aclDumpHTTPStatusListWalkee(acl_httpstatus_data * const &node, void *state)
-{
-    // state is a SBufList*
-    static_cast<SBufList *>(state)->push_back(node->toStr());
-}
+struct HttpStatusAclDumpVisitor {
+    SBufList contents;
+    void operator() (const acl_httpstatus_data * node) {
+        contents.push_back(node->toStr());
+    }
+};
 
 SBufList
 ACLHTTPStatus::dump() const
 {
-    SBufList w;
-    data->walk(aclDumpHTTPStatusListWalkee, &w);
-    return w;
+    HttpStatusAclDumpVisitor visitor;
+    data->visit(visitor);
+    return visitor.contents;
 }