summaryrefslogtreecommitdiff
path: root/libproxy/proxy.cpp
diff options
context:
space:
mode:
authornicolas.dufresne <nicolas.dufresne@c587cffe-e639-0410-9787-d7902ae8ed56>2010-05-17 21:28:24 +0000
committernicolas.dufresne <nicolas.dufresne@c587cffe-e639-0410-9787-d7902ae8ed56>2010-05-17 21:28:24 +0000
commitd0e2326ac3af500e8a9445248e3ce985f98eefab (patch)
tree07c5d903d3e987070004d398544b789531170497 /libproxy/proxy.cpp
parent5ccf03272b70d6eb40a8aa8b54ebc75edcbb108a (diff)
downloadlibproxy-d0e2326ac3af500e8a9445248e3ce985f98eefab.tar.gz
Reduce excessive string copy when dealing with ignores
git-svn-id: http://libproxy.googlecode.com/svn/trunk@666 c587cffe-e639-0410-9787-d7902ae8ed56
Diffstat (limited to 'libproxy/proxy.cpp')
-rw-r--r--libproxy/proxy.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/libproxy/proxy.cpp b/libproxy/proxy.cpp
index 949c285..617c69d 100644
--- a/libproxy/proxy.cpp
+++ b/libproxy/proxy.cpp
@@ -239,12 +239,15 @@ vector<string> proxy_factory::get_proxies(string url_) {
ignores = this->mm.get_extensions<ignore_extension>();
invign = confign[0] == '-';
if (invign) confign = confign.substr(1);
- for (size_t i=0 ; i < confign.size() && i != string::npos && !ignored; i=confign.substr(i).find(',')) {
- while (i < confign.size() && confign[i] == ',') i++;
-
- for (vector<ignore_extension*>::iterator it=ignores.begin() ; it != ignores.end() && !ignored ; it++)
- if ((*it)->ignore(*realurl, confign.substr(i, confign.find(','))))
- ignored = true;
+ for (size_t i=0 ; i < confign.size() && !ignored;) {
+ size_t next = confign.find(',', i);
+ if (next == string::npos) next = confign.length();
+ if (next > (i+1)) {
+ string ignorestr = confign.substr (i, next - i);
+ for (vector<ignore_extension*>::iterator it=ignores.begin() ; it != ignores.end() && !ignored ; it++)
+ ignored = ((*it)->ignore(*realurl, ignorestr));
+ }
+ i = next+1;
}
if (!ignored && invign) goto do_return;
if (ignored && !invign) goto do_return;