瀏覽代碼

Rewrite cookie_helper::reverseDomainLevel()

Tatsuhiro Tsujikawa 12 年之前
父節點
當前提交
b3acf4d393
共有 1 個文件被更改,包括 20 次插入10 次删除
  1. 20 10
      src/cookie_helper.cc

+ 20 - 10
src/cookie_helper.cc

@@ -402,18 +402,28 @@ bool pathMatch(const std::string& requestPath, const std::string& path)
 std::string reverseDomainLevel(const std::string& domain)
 {
   std::string r;
-  for(std::string::const_iterator i = domain.begin(), eoi = domain.end();
-      i != eoi;) {
-    std::string::const_iterator j = std::find(i, eoi, '.');
-    r.insert(r.begin(), '.');
-    r.insert(r.begin(), i, j);
-    i = j;
-    if(j != eoi) {
-      ++i;
+  if(domain.empty()) {
+    return r;
+  }
+  r.reserve(domain.size());
+  // Cut trailing dots
+  std::string::const_iterator s = domain.end() - 1;
+  for(; *s == '.'; --s) {
+    if(s == domain.begin()) {
+      return r;
     }
   }
-  if(!r.empty()) {
-    r.erase(r.size()-1, 1);
+  std::string::const_iterator t = s + 1;
+  for(; ; --s) {
+    if(*s == '.') {
+      r.append(s + 1, t);
+      r += '.';
+      t = s;
+    }
+    if(s == domain.begin()) {
+      r.append(s, t);
+      break;
+    }
   }
   return r;
 }