diff options
author | nicolas.dufresne <nicolas.dufresne@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-05-17 21:28:24 +0000 |
---|---|---|
committer | nicolas.dufresne <nicolas.dufresne@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-05-17 21:28:24 +0000 |
commit | d0e2326ac3af500e8a9445248e3ce985f98eefab (patch) | |
tree | 07c5d903d3e987070004d398544b789531170497 /libproxy/proxy.cpp | |
parent | 5ccf03272b70d6eb40a8aa8b54ebc75edcbb108a (diff) | |
download | libproxy-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.cpp | 15 |
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; |