Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / rgw / rgw_string.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #include "rgw_string.h"
5
6 static bool char_eq(char c1, char c2)
7 {
8   return c1 == c2;
9 }
10
11 static bool ci_char_eq(char c1, char c2)
12 {
13   return tolower(c1) == tolower(c2);
14 }
15
16 bool match_wildcards(boost::string_view pattern, boost::string_view input,
17                      uint32_t flags)
18 {
19   const auto eq = (flags & MATCH_CASE_INSENSITIVE) ? &ci_char_eq : &char_eq;
20
21   auto it1 = pattern.begin();
22   auto it2 = input.begin();
23   while (true) {
24     if (it1 == pattern.end())
25       return it2 == input.end();
26     if (*it1 == '*') {
27       if (it1 + 1 == pattern.end())
28         return true;
29       if (it2 == input.end() || eq(*(it1 + 1), *it2))
30         ++it1;
31       else
32         ++it2;
33       continue;
34     }
35     if (it2 == input.end())
36       return false;
37     if (*it1 == '?' || eq(*it1, *it2)) {
38       ++it1;
39       ++it2;
40       continue;
41     }
42     return false;
43   }
44   return false;
45 }