2525#include < algorithm>
2626#include < regex>
2727#elif defined(_WIN32)
28+ #include < cstring>
2829#include " Shlwapi.h"
2930#else
3031#include < fnmatch.h>
@@ -46,7 +47,7 @@ StringMatching::~StringMatching()
4647}
4748
4849#if defined(__cplusplus_winrt)
49- void replace_all (
50+ static void replace_all (
5051 std::string& subject,
5152 const std::string& search,
5253 const std::string& replace)
@@ -59,7 +60,7 @@ void replace_all(
5960 }
6061}
6162
62- bool StringMatching::matchPattern (
63+ static bool do_match_pattern (
6364 const char * pattern,
6465 const char * str)
6566{
@@ -71,87 +72,52 @@ bool StringMatching::matchPattern(
7172
7273 std::regex path_regex (path);
7374 std::smatch spec_match;
74- if (std::regex_match (spec, spec_match, path_regex))
75- {
76- return true ;
77- }
78-
79- return false ;
75+ return std::regex_match (spec, spec_match, path_regex);
8076}
8177
82- bool StringMatching::matchString (
83- const char * str1,
84- const char * str2)
78+ #elif defined(_WIN32)
79+ static bool do_match_pattern (
80+ const char * pattern,
81+ const char * str)
8582{
86- if (StringMatching::matchPattern (str1, str2))
83+ // An empty pattern only matches an empty string
84+ if (strlen (pattern) == 0 )
8785 {
88- return true ;
86+ return strlen (str) == 0 ;
8987 }
90-
91- if (StringMatching::matchPattern (str2, str1) )
88+ // An empty string also matches a pattern of "*"
89+ if (strlen (str) == 0 )
9290 {
93- return true ;
91+ return strcmp (pattern, " * " ) == 0 ;
9492 }
95-
96- return false ;
93+ // Leave rest of cases to PathMatchSpecA
94+ return PathMatchSpecA (str, pattern) ;
9795}
9896
99- #elif defined(_WIN32)
100- bool StringMatching::matchPattern (
97+ #else
98+ static bool do_match_pattern (
10199 const char * pattern,
102100 const char * str)
103101{
104- if (PathMatchSpecA (str, pattern))
105- {
106- return true ;
107- }
108- return false ;
102+ return fnmatch (pattern, str, FNM_NOESCAPE) == 0 ;
109103}
110104
111- bool StringMatching::matchString (
112- const char * str1,
113- const char * str2)
114- {
115- if (PathMatchSpecA (str1, str2))
116- {
117- return true ;
118- }
119- if (PathMatchSpecA (str2, str1))
120- {
121- return true ;
122- }
123- return false ;
124- }
105+ #endif // if defined(__cplusplus_winrt)
125106
126- #else
127107bool StringMatching::matchPattern (
128108 const char * pattern,
129109 const char * str)
130110{
131- if (fnmatch (pattern, str, FNM_NOESCAPE) == 0 )
132- {
133- return true ;
134- }
135- return false ;
111+ return do_match_pattern (pattern, str);
136112}
137113
138114bool StringMatching::matchString (
139115 const char * str1,
140116 const char * str2)
141117{
142- if (fnmatch (str1, str2, FNM_NOESCAPE) == 0 )
143- {
144- return true ;
145- }
146- if (fnmatch (str2, str1, FNM_NOESCAPE) == 0 )
147- {
148- return true ;
149- }
150- return false ;
118+ return do_match_pattern (str1, str2) || do_match_pattern (str2, str1);
151119}
152120
153- #endif // if defined(__cplusplus_winrt)
154-
155121} // namespace rtps
156- } /* namespace rtps */
157- } /* namespace eprosima */
122+ } // namespace fastrtps
123+ } // namespace eprosima
0 commit comments