[v4,08/15] Use regex::match wrapper instead of regexec.

Message ID 20200504123416.243214-9-gprocida@google.com
State Committed
Headers
Series Simplify regex and suppression parsing. |

Commit Message

Giuliano Procida May 4, 2020, 12:34 p.m. UTC
  This patch eliminates all calls to regexec except that by regex::match
itself.

There are no behavioural changes.

	* src/abg-corpus-priv.h: Mechanically substitute use of
	regexec with regex::match wrapper.
	* src/abg-suppression-priv.h: Ditto.
	* src/abg-suppression.cc: Ditto.

Reviewed-by: Matthias Maennich <maennich@google.com>
Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-corpus-priv.h      |   8 +--
 src/abg-suppression-priv.h |  10 ++--
 src/abg-suppression.cc     | 119 +++++++++++--------------------------
 3 files changed, 44 insertions(+), 93 deletions(-)
  

Patch

diff --git a/src/abg-corpus-priv.h b/src/abg-corpus-priv.h
index f408e453..ee8c8239 100644
--- a/src/abg-corpus-priv.h
+++ b/src/abg-corpus-priv.h
@@ -521,7 +521,7 @@  public:
 	   compiled_regex_fns_suppress().begin();
 	 i != compiled_regex_fns_suppress().end();
 	 ++i)
-      if (regexec(i->get(), frep.c_str(), 0, NULL, 0) == 0)
+      if (regex::match(*i, frep))
 	{
 	  keep = false;
 	  break;
@@ -554,7 +554,7 @@  public:
 	     compiled_regex_fns_keep().begin();
 	   i != compiled_regex_fns_keep().end();
 	   ++i)
-	if (regexec(i->get(), frep.c_str(), 0, NULL, 0) == 0)
+	if (regex::match(*i, frep))
 	  {
 	    keep = true;
 	    break;
@@ -628,7 +628,7 @@  public:
 	   compiled_regex_vars_suppress().begin();
 	 i != compiled_regex_vars_suppress().end();
 	 ++i)
-      if (regexec(i->get(), frep.c_str(), 0, NULL, 0) == 0)
+      if (regex::match(*i, frep))
 	{
 	  keep = false;
 	  break;
@@ -662,7 +662,7 @@  public:
 	       compiled_regex_vars_keep().begin();
 	     i != compiled_regex_vars_keep().end();
 	     ++i)
-	  if (regexec(i->get(), frep.c_str(), 0, NULL, 0) == 0)
+	  if (regex::match(*i, frep))
 	    {
 	      keep = true;
 	      break;
diff --git a/src/abg-suppression-priv.h b/src/abg-suppression-priv.h
index 65d919a8..deb08269 100644
--- a/src/abg-suppression-priv.h
+++ b/src/abg-suppression-priv.h
@@ -160,14 +160,14 @@  public:
     if (regex::regex_t_sptr regexp = get_soname_regex())
       {
 	has_regexp = true;
-	if (regexec(regexp.get(), soname.c_str(), 0, NULL, 0) != 0)
+	if (!regex::match(regexp, soname))
 	  return false;
       }
 
     if (regex::regex_t_sptr regexp = get_soname_not_regex())
       {
 	has_regexp = true;
-	if (regexec(regexp.get(), soname.c_str(), 0, NULL, 0) == 0)
+	if (regex::match(regexp, soname))
 	  return false;
       }
 
@@ -195,16 +195,14 @@  public:
     if (regex::regex_t_sptr regexp = get_file_name_regex())
       {
 	has_regexp = true;
-	if (regexec(regexp.get(), binary_name.c_str(),
-	  0, NULL, 0) != 0)
+	if (!regex::match(regexp, binary_name))
 	  return false;
       }
 
     if (regex::regex_t_sptr regexp = get_file_name_not_regex())
       {
 	has_regexp = true;
-	if (regexec(regexp.get(), binary_name.c_str(),
-	  0, NULL, 0) == 0)
+	if (regex::match(regexp, binary_name))
 	  return false;
       }
 
diff --git a/src/abg-suppression.cc b/src/abg-suppression.cc
index 51885cf2..c89201b6 100644
--- a/src/abg-suppression.cc
+++ b/src/abg-suppression.cc
@@ -990,18 +990,14 @@  suppression_matches_type_name(const type_suppression&	s,
 	  if (const regex_t_sptr& type_name_regex =
 	      s.priv_->get_type_name_regex())
 	    {
-	      if (regexec(type_name_regex.get(),
-			  type_name.c_str(),
-			  0, NULL, 0) != 0)
+	      if (!regex::match(type_name_regex, type_name))
 		return false;
 	    }
 
 	  if (const regex_t_sptr type_name_not_regex =
 	      s.priv_->get_type_name_not_regex())
 	    {
-	      if (regexec(type_name_not_regex.get(),
-			  type_name.c_str(),
-			  0, NULL, 0) == 0)
+	      if (regex::match(type_name_not_regex, type_name))
 		return false;
 	    }
 	}
@@ -1048,7 +1044,7 @@  suppression_matches_type_location(const type_suppression&	s,
       loc.expand(loc_path, loc_line, loc_column);
 
       if (regex_t_sptr regexp = s.priv_->get_source_location_to_keep_regex())
-	if (regexec(regexp.get(), loc_path.c_str(), 0, NULL, 0) == 0)
+	if (regex::match(regexp, loc_path))
 	  return false;
 
       tools_utils::base_name(loc_path, loc_path_base);
@@ -2484,9 +2480,7 @@  function_suppression::suppresses_function(const function_decl* fn,
   const regex_t_sptr name_regex = priv_->get_name_regex();
   if (name_regex)
     {
-      if (regexec(name_regex.get(),
-		  fname.c_str(),
-		  0, NULL, 0) != 0)
+      if (!regex::match(name_regex, fname))
 	return false;
 
       if (get_allow_other_aliases()
@@ -2507,9 +2501,7 @@  function_suppression::suppresses_function(const function_decl* fn,
 	      for (elf_symbol_sptr a = sym->get_next_alias();
 		   a && !a->is_main_symbol();
 		   a = a->get_next_alias())
-		if (regexec(name_regex.get(),
-			    a->get_name().c_str(),
-			    0, NULL, 0) != 0)
+		if (!regex::match(name_regex, a->get_name()))
 		  return false;
 	    }
 	}
@@ -2519,9 +2511,7 @@  function_suppression::suppresses_function(const function_decl* fn,
   const regex_t_sptr name_not_regex = priv_->get_name_not_regex();
   if (name_not_regex)
     {
-      if (regexec(name_not_regex.get(),
-		  fname.c_str(),
-		  0, NULL, 0) == 0)
+      if (regex::match(name_not_regex, fname))
 	return false;
 
       if (get_allow_other_aliases()
@@ -2542,9 +2532,7 @@  function_suppression::suppresses_function(const function_decl* fn,
 	      for (elf_symbol_sptr a = sym->get_next_alias();
 		   a && !a->is_main_symbol();
 		   a = a->get_next_alias())
-		if (regexec(name_regex.get(),
-			    a->get_name().c_str(),
-			    0, NULL, 0) == 0)
+		if (regex::match(name_regex, a->get_name()))
 		  return false;
 	    }
 	}
@@ -2568,9 +2556,7 @@  function_suppression::suppresses_function(const function_decl* fn,
     {
       const regex_t_sptr return_type_regex = priv_->get_return_type_regex();
       if (return_type_regex
-	  && (regexec(return_type_regex.get(),
-		      fn_return_type_name.c_str(),
-		      0, NULL, 0) != 0))
+	  && !regex::match(return_type_regex, fn_return_type_name))
 	return false;
     }
 
@@ -2607,18 +2593,13 @@  function_suppression::suppresses_function(const function_decl* fn,
   else if (sym)
     {
       const regex_t_sptr symbol_name_regex = priv_->get_symbol_name_regex();
-      if (symbol_name_regex
-	  && (regexec(symbol_name_regex.get(),
-		      fn_sym_name.c_str(),
-		      0, NULL, 0) != 0))
+      if (symbol_name_regex && !regex::match(symbol_name_regex, fn_sym_name))
 	return false;
 
       const regex_t_sptr symbol_name_not_regex =
 	priv_->get_symbol_name_not_regex();
       if (symbol_name_not_regex
-	  && (regexec(symbol_name_not_regex.get(),
-		      fn_sym_name.c_str(),
-		      0, NULL, 0) == 0))
+	  && regex::match(symbol_name_not_regex, fn_sym_name))
 	return false;
 
       if (get_allow_other_aliases())
@@ -2633,15 +2614,11 @@  function_suppression::suppresses_function(const function_decl* fn,
 		   a = a->get_next_alias())
 		{
 		  if (symbol_name_regex
-		      && (regexec(symbol_name_regex.get(),
-				  a->get_name().c_str(),
-				  0, NULL, 0) != 0))
+		      && !regex::match(symbol_name_regex, a->get_name()))
 		    return false;
 
 		  if (symbol_name_not_regex
-		      && (regexec(symbol_name_not_regex.get(),
-				  a->get_name().c_str(),
-				  0, NULL, 0) == 0))
+		      && regex::match(symbol_name_not_regex, a->get_name()))
 		    return false;
 		}
 	    }
@@ -2660,9 +2637,7 @@  function_suppression::suppresses_function(const function_decl* fn,
       const regex_t_sptr symbol_version_regex =
 	priv_->get_symbol_version_regex();
       if (symbol_version_regex
-	  && (regexec(symbol_version_regex.get(),
-		      fn_sym_version.c_str(),
-		      0, NULL, 0) != 0))
+	  && !regex::match(symbol_version_regex, fn_sym_version))
 	return false;
     }
 
@@ -2703,9 +2678,8 @@  function_suppression::suppresses_function(const function_decl* fn,
 		(*p)->priv_->get_type_name_regex();
 	      if (parm_type_name_regex)
 		{
-		  if ((regexec(parm_type_name_regex.get(),
-			       fn_parm_type_qualified_name.c_str(),
-			       0, NULL, 0) != 0))
+		  if (!regex::match(parm_type_name_regex,
+				    fn_parm_type_qualified_name))
 		    return false;
 		}
 	    }
@@ -2793,10 +2767,7 @@  function_suppression::suppresses_function_symbol(const elf_symbol* sym,
   else if (!get_symbol_name_regex_str().empty())
     {
       const regex_t_sptr symbol_name_regex = priv_->get_symbol_name_regex();
-      if (symbol_name_regex
-	  && (regexec(symbol_name_regex.get(),
-		      sym_name.c_str(),
-		      0, NULL, 0) != 0))
+      if (symbol_name_regex && !regex::match(symbol_name_regex, sym_name))
 	return false;
     }
   else
@@ -2813,9 +2784,7 @@  function_suppression::suppresses_function_symbol(const elf_symbol* sym,
       const regex_t_sptr symbol_version_regex =
 	priv_->get_symbol_version_regex();
       if (symbol_version_regex
-	  && (regexec(symbol_version_regex.get(),
-		      sym_version.c_str(),
-		      0, NULL, 0) != 0))
+	  && !regex::match(symbol_version_regex, sym_version))
 	return false;
     }
   else
@@ -2907,12 +2876,12 @@  suppression_matches_function_name(const suppr::function_suppression& s,
 {
   if (regex_t_sptr regexp = s.priv_->get_name_regex())
     {
-      if (regexec(regexp.get(), fn_name.c_str(), 0, NULL, 0) != 0)
+      if (!regex::match(regexp, fn_name))
 	return false;
     }
   else if (regex_t_sptr regexp = s.priv_->get_name_not_regex())
     {
-      if (regexec(regexp.get(), fn_name.c_str(), 0, NULL, 0) == 0)
+      if (regex::match(regexp, fn_name))
 	return false;
     }
   else if (s.priv_->name_.empty())
@@ -2943,12 +2912,12 @@  suppression_matches_function_sym_name(const suppr::function_suppression& s,
 {
   if (regex_t_sptr regexp = s.priv_->get_symbol_name_regex())
     {
-      if (regexec(regexp.get(), fn_linkage_name.c_str(), 0, NULL, 0) != 0)
+      if (!regex::match(regexp, fn_linkage_name))
 	return false;
     }
   else if (regex_t_sptr regexp = s.priv_->get_symbol_name_not_regex())
     {
-      if (regexec(regexp.get(), fn_linkage_name.c_str(), 0, NULL, 0) == 0)
+      if (regex::match(regexp, fn_linkage_name))
 	return false;
     }
   else if (s.priv_->symbol_name_.empty())
@@ -2976,12 +2945,12 @@  suppression_matches_variable_name(const suppr::variable_suppression& s,
 {
   if (regex_t_sptr regexp = s.priv_->get_name_regex())
     {
-      if (regexec(regexp.get(), var_name.c_str(), 0, NULL, 0) != 0)
+      if (!regex::match(regexp, var_name))
 	return false;
     }
   else if (regex_t_sptr regexp = s.priv_->get_name_not_regex())
     {
-      if (regexec(regexp.get(), var_name.c_str(), 0, NULL, 0) == 0)
+      if (regex::match(regexp, var_name))
 	return false;
     }
   else if (s.priv_->name_.empty())
@@ -3010,13 +2979,13 @@  suppression_matches_variable_sym_name(const suppr::variable_suppression& s,
 {
   if (regex_t_sptr regexp = s.priv_->get_symbol_name_regex())
     {
-      if (regexec(regexp.get(), var_linkage_name.c_str(), 0, NULL, 0) != 0)
+      if (!regex::match(regexp, var_linkage_name))
 	return false;
     }
   else if (regex_t_sptr regexp =
 	   s.priv_->get_symbol_name_not_regex())
     {
-      if (regexec(regexp.get(), var_linkage_name.c_str(), 0, NULL, 0) == 0)
+      if (regex::match(regexp, var_linkage_name))
 	return false;
     }
   else if (s.priv_->symbol_name_.empty())
@@ -3045,7 +3014,7 @@  suppression_matches_type(const suppr::type_suppression& s,
 {
   if (regex_t_sptr regexp = s.priv_->get_type_name_regex())
     {
-      if (regexec(regexp.get(), type_name.c_str(), 0, NULL, 0) != 0)
+      if (!regex::match(regexp, type_name))
 	return false;
     }
   else if (!s.get_type_name().empty())
@@ -3743,15 +3712,11 @@  variable_suppression::suppresses_variable(const var_decl* var,
       if (get_name().empty())
 	{
 	  const regex_t_sptr name_regex = priv_->get_name_regex();
-	  if (name_regex
-	      && (regexec(name_regex.get(), var_name.c_str(),
-			  0, NULL, 0) != 0))
+	  if (name_regex && !regex::match(name_regex, var_name))
 	    return false;
 
 	  const regex_t_sptr name_not_regex = priv_->get_name_not_regex();
-	  if (name_not_regex
-	      && (regexec(name_not_regex.get(), var_name.c_str(),
-			  0, NULL, 0) == 0))
+	  if (name_not_regex && regex::match(name_not_regex, var_name))
 	    return false;
 	}
     }
@@ -3767,16 +3732,12 @@  variable_suppression::suppresses_variable(const var_decl* var,
   else
     {
       const regex_t_sptr sym_name_regex = priv_->get_symbol_name_regex();
-      if (sym_name_regex
-	  && (regexec(sym_name_regex.get(), var_sym_name.c_str(),
-		      0, NULL, 0) != 0))
+      if (sym_name_regex && !regex::match(sym_name_regex, var_sym_name))
 	return false;
 
       const regex_t_sptr sym_name_not_regex =
 	priv_->get_symbol_name_not_regex();
-      if (sym_name_not_regex
-	  && (regexec(sym_name_not_regex.get(), var_sym_name.c_str(),
-		      0, NULL, 0) == 0))
+      if (sym_name_not_regex && regex::match(sym_name_not_regex, var_sym_name))
 	return false;
     }
 
@@ -3793,9 +3754,7 @@  variable_suppression::suppresses_variable(const var_decl* var,
       const regex_t_sptr symbol_version_regex =
 	priv_->get_symbol_version_regex();
       if (symbol_version_regex
-	  && (regexec(symbol_version_regex.get(),
-		      var_sym_version.c_str(),
-		      0, NULL, 0) != 0))
+	  && !regex::match(symbol_version_regex, var_sym_version))
 	return false;
     }
 
@@ -3813,9 +3772,7 @@  variable_suppression::suppresses_variable(const var_decl* var,
       if (get_type_name().empty())
 	{
 	  const regex_t_sptr type_name_regex = priv_->get_type_name_regex();
-	  if (type_name_regex
-	      && (regexec(type_name_regex.get(), var_type_name.c_str(),
-			  0, NULL, 0) != 0))
+	  if (type_name_regex && !regex::match(type_name_regex, var_type_name))
 	    return false;
 	}
     }
@@ -3906,9 +3863,7 @@  variable_suppression::suppresses_variable_symbol(const elf_symbol* sym,
   else if (!get_symbol_name_regex_str().empty())
     {
       const regex_t_sptr sym_name_regex = priv_->get_symbol_name_regex();
-      if (sym_name_regex
-	  && (regexec(sym_name_regex.get(), sym_name.c_str(),
-		      0, NULL, 0) != 0))
+      if (sym_name_regex && !regex::match(sym_name_regex, sym_name))
 	return false;
     }
   else
@@ -3925,9 +3880,7 @@  variable_suppression::suppresses_variable_symbol(const elf_symbol* sym,
       const regex_t_sptr symbol_version_regex =
 	priv_->get_symbol_version_regex();
       if (symbol_version_regex
-	  && (regexec(symbol_version_regex.get(),
-		      sym_version.c_str(),
-		      0, NULL, 0) != 0))
+	  && !regex::match(symbol_version_regex, sym_version))
 	return false;
     }
   else
@@ -4223,14 +4176,14 @@  file_suppression::suppresses_file(const string& file_path)
   if (regex_t_sptr regexp = suppression_base::priv_->get_file_name_regex())
     {
       has_regexp = true;
-      if (regexec(regexp.get(), fname.c_str(), 0, NULL, 0) != 0)
+      if (!regex::match(regexp, fname))
 	return false;
     }
 
   if (regex_t_sptr regexp = suppression_base::priv_->get_file_name_not_regex())
     {
       has_regexp = true;
-      if (regexec(regexp.get(), fname.c_str(), 0, NULL, 0) == 0)
+      if (regex::match(regexp, fname))
 	return false;
     }