From: Amos Jeffries Date: Sun, 26 Jul 2015 18:34:36 +0000 (-0700) Subject: Replace aclDestroyRegexList() with RegexList delete operator X-Git-Tag: merge-candidate-3-v1~24^2~2^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f778abb857670abcb4fab0e717d0765f4ed99a0c;p=thirdparty%2Fsquid.git Replace aclDestroyRegexList() with RegexList delete operator --- diff --git a/src/RegexList.cc b/src/RegexList.cc index 71f520d322..13de2d0f08 100644 --- a/src/RegexList.cc +++ b/src/RegexList.cc @@ -9,3 +9,17 @@ #include "squid.h" #include "RegexList.h" +RegexList::~RegexList() +{ + xfree(pattern); + regfree(®ex); + + // lists could be very long + // iterate instead of recursing + for (auto p = next; p; p = next) { + next = p->next; + p->next = nullptr; + delete p; + } +} + diff --git a/src/RegexList.h b/src/RegexList.h index 214d631ba8..fe783b81e8 100644 --- a/src/RegexList.h +++ b/src/RegexList.h @@ -11,6 +11,8 @@ #include "mem/forward.h" +#include + /// list of regular expressions. class RegexList { @@ -20,8 +22,8 @@ public: RegexList() = delete; RegexList(int aFlags, const char *aPattern) : flags(aFlags), pattern(xstrdup(aPattern)), next(nullptr) {} RegexList(const RegexList &) = delete; - RegexList(const RegexList &&) = delete; - ~RegexList() {xfree(pattern); regfree(®ex); delete next;} + RegexList(const RegexList && o) = delete; + ~RegexList(); int flags; char *pattern; diff --git a/src/acl/RegexData.cc b/src/acl/RegexData.cc index 1b1bb00901..82b8b37d6e 100644 --- a/src/acl/RegexData.cc +++ b/src/acl/RegexData.cc @@ -23,20 +23,9 @@ #include "RegexList.h" #include "wordlist.h" -static void -aclDestroyRegexList(RegexList * data) -{ - RegexList *next = NULL; - - for (; data; data = next) { - next = data->next; - delete data; - } -} - ACLRegexData::~ACLRegexData() { - aclDestroyRegexList(data); + delete data; } bool @@ -189,7 +178,7 @@ compileOptimisedREs(RegexList **curlist, wordlist * wl) debugs(28, 2, "compileOptimisedREs: -i" ); newlistp = compileRE( newlistp, largeRE, flags ); if (newlistp == NULL) { - aclDestroyRegexList( newlist ); + delete newlist; return 0; } flags |= REG_ICASE; @@ -203,7 +192,7 @@ compileOptimisedREs(RegexList **curlist, wordlist * wl) debugs(28, 2, "compileOptimisedREs: +i"); newlistp = compileRE( newlistp, largeRE, flags ); if (newlistp == NULL) { - aclDestroyRegexList( newlist ); + delete newlist; return 0; } flags &= ~REG_ICASE; @@ -229,7 +218,7 @@ compileOptimisedREs(RegexList **curlist, wordlist * wl) debugs(28, 2, "compileOptimisedREs: buffer full, generating new optimised RE..." ); newlistp = compileRE( newlistp, largeRE, flags ); if (newlistp == NULL) { - aclDestroyRegexList( newlist ); + delete newlist; return 0; } largeRE[largeREindex=0] = '\0'; @@ -240,7 +229,7 @@ compileOptimisedREs(RegexList **curlist, wordlist * wl) newlistp = compileRE( newlistp, largeRE, flags ); if (newlistp == NULL) { - aclDestroyRegexList( newlist ); + delete newlist; return 0; }