@@ -1623,6 +1623,30 @@ maybe_get_string_prop(const ini::config::section& section,
return true;
}
+/// Maybe compile a property to a regex.
+///
+/// Attempt to find a simple property in an ini section and compile it
+/// to a regex.
+///
+/// @param section the ini section to look in
+///
+/// @param prop the property name
+///
+/// @param r the regex to compile into
+///
+/// @return whether the property was found
+static bool
+maybe_get_regex_prop(const ini::config::section& section,
+ const std::string& name,
+ regex_t_sptr& regex)
+{
+ string str;
+ if (!maybe_get_string_prop(section, name, str))
+ return false;
+ regex = regex::compile(str);
+ return true;
+}
+
/// Read a type suppression from an instance of ini::config::section
/// and build a @ref type_suppression as a result.
///
@@ -1645,45 +1669,23 @@ read_type_suppression(const ini::config::section& section)
string label_str;
maybe_get_string_prop(section, "label", label_str);
- ini::simple_property_sptr file_name_regex_prop =
- is_simple_property(section.find_property("file_name_regexp"));
regex_t_sptr file_name_regex;
- if (file_name_regex_prop)
- file_name_regex =
- regex::compile(file_name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
- ini::simple_property_sptr file_name_not_regex_prop =
- is_simple_property(section.find_property("file_name_not_regexp"));
regex_t_sptr file_name_not_regex;
- if (file_name_not_regex_prop)
- file_name_not_regex =
- regex::compile(file_name_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
- ini::simple_property_sptr soname_regex_prop =
- is_simple_property(section.find_property("soname_regexp"));
regex_t_sptr soname_regex;
- if (soname_regex_prop)
- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
- ini::simple_property_sptr soname_not_regex_prop =
- is_simple_property(section.find_property("soname_not_regexp"));
regex_t_sptr soname_not_regex;
- if (soname_not_regex_prop)
- soname_not_regex =
- regex::compile(soname_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
- ini::simple_property_sptr name_regex_prop =
- is_simple_property(section.find_property("name_regexp"));
regex_t_sptr name_regex;
- if (name_regex_prop)
- name_regex = regex::compile(name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "name_regexp", name_regex);
- ini::simple_property_sptr name_not_regex_prop =
- is_simple_property(section.find_property("name_not_regexp"));
regex_t_sptr name_not_regex;
- if (name_not_regex_prop)
- name_not_regex =
- regex::compile(name_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "name_not_regexp", name_not_regex);
string name_str;
maybe_get_string_prop(section, "name", name_str);
@@ -1710,12 +1712,8 @@ read_type_suppression(const ini::config::section& section)
}
}
- ini::simple_property_sptr srcloc_not_regexp_prop =
- is_simple_property(section.find_property("source_location_not_regexp"));
regex_t_sptr srcloc_not_regex;
- if (srcloc_not_regexp_prop)
- srcloc_not_regex =
- regex::compile(srcloc_not_regexp_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "source_location_not_regexp", srcloc_not_regex);
std::string type_kind_str;
bool consider_type_kind =
@@ -3199,85 +3197,47 @@ read_function_suppression(const ini::config::section& section)
string label_str;
maybe_get_string_prop(section, "label", label_str);
- ini::simple_property_sptr file_name_regex_prop =
- is_simple_property(section.find_property("file_name_regexp"));
regex_t_sptr file_name_regex;
- if (file_name_regex_prop)
- file_name_regex =
- regex::compile(file_name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
- ini::simple_property_sptr file_name_not_regex_prop =
- is_simple_property(section.find_property("file_name_not_regexp"));
regex_t_sptr file_name_not_regex;
- if (file_name_not_regex_prop)
- file_name_not_regex =
- regex::compile(file_name_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
- ini::simple_property_sptr soname_regex_prop =
- is_simple_property(section.find_property("soname_regexp"));
regex_t_sptr soname_regex;
- if (soname_regex_prop)
- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
- ini::simple_property_sptr soname_not_regex_prop =
- is_simple_property(section.find_property("soname_not_regexp"));
regex_t_sptr soname_not_regex;
- if (soname_not_regex_prop)
- soname_not_regex =
- regex::compile(soname_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
string name;
maybe_get_string_prop(section, "name", name);
- ini::simple_property_sptr name_regex_prop =
- is_simple_property(section.find_property("name_regexp"));
regex_t_sptr name_regex;
- if (name_regex_prop)
- name_regex = regex::compile(name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "name_regexp", name_regex);
- ini::simple_property_sptr name_not_regex_prop =
- is_simple_property(section.find_property("name_not_regexp"));
regex_t_sptr name_not_regex;
- if (name_not_regex_prop)
- name_not_regex =
- regex::compile(name_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "name_not_regexp", name_not_regex);
string return_type_name;
maybe_get_string_prop(section, "return_type_name", return_type_name);
- ini::simple_property_sptr return_type_regex_prop =
- is_simple_property(section.find_property("return_type_regexp"));
regex_t_sptr return_type_regex;
- if (return_type_regex_prop)
- return_type_regex =
- regex::compile(return_type_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "return_type_regexp", return_type_regex);
string sym_name;
maybe_get_string_prop(section, "symbol_name", sym_name);
- ini::simple_property_sptr sym_name_regex_prop =
- is_simple_property(section.find_property("symbol_name_regexp"));
regex_t_sptr sym_name_regex;
- if (sym_name_regex_prop)
- sym_name_regex =
- regex::compile(sym_name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "symbol_name_regexp", sym_name_regex);
- ini::simple_property_sptr sym_name_not_regex_prop =
- is_simple_property(section.find_property("symbol_name_not_regexp"));
regex_t_sptr sym_name_not_regex;
- if (sym_name_not_regex_prop)
- sym_name_not_regex =
- regex::compile(sym_name_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "symbol_name_not_regexp", sym_name_not_regex);
string sym_version;
maybe_get_string_prop(section, "symbol_version", sym_version);
- ini::simple_property_sptr sym_ver_regex_prop =
- is_simple_property(section.find_property("symbol_version_regexp"));
regex_t_sptr sym_ver_regex;
- if (sym_ver_regex_prop)
- sym_ver_regex =
- regex::compile(sym_ver_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "symbol_version_regexp", sym_ver_regex);
string allow_other_aliases;
maybe_get_string_prop(section, "allow_other_aliases", allow_other_aliases);
@@ -4029,85 +3989,47 @@ read_variable_suppression(const ini::config::section& section)
string label_str;
maybe_get_string_prop(section, "label", label_str);
- ini::simple_property_sptr file_name_regex_prop =
- is_simple_property(section.find_property("file_name_regexp"));
regex_t_sptr file_name_regex;
- if (file_name_regex_prop)
- file_name_regex =
- regex::compile(file_name_regex_prop->get_value()->as_string());
-
- ini::simple_property_sptr file_name_not_regex_prop =
- is_simple_property(section.find_property("file_name_not_regexp"));
- regex_t_sptr file_name_not_regex;
- if (file_name_not_regex_prop)
- file_name_not_regex =
- regex::compile(file_name_not_regex_prop->get_value()->as_string());
-
- ini::simple_property_sptr soname_regex_prop =
- is_simple_property(section.find_property("soname_regexp"));
+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
+
+ regex_t_sptr file_name_not_regex;
+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
+
regex_t_sptr soname_regex;
- if (soname_regex_prop)
- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
- ini::simple_property_sptr soname_not_regex_prop =
- is_simple_property(section.find_property("soname_not_regexp"));
regex_t_sptr soname_not_regex;
- if (soname_not_regex_prop)
- soname_not_regex =
- regex::compile(soname_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
string name_str;
maybe_get_string_prop(section, "name", name_str);
- ini::simple_property_sptr name_regex_prop =
- is_simple_property(section.find_property("name_regexp"));
regex_t_sptr name_regex;
- if (name_regex_prop)
- name_regex = regex::compile(name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "name_regexp", name_regex);
- ini::simple_property_sptr name_not_regex_prop =
- is_simple_property(section.find_property("name_not_regexp"));
regex_t_sptr name_not_regex;
- if (name_not_regex_prop)
- name_not_regex =
- regex::compile(name_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "name_not_regexp", name_not_regex);
string symbol_name;
maybe_get_string_prop(section, "symbol_name", symbol_name);
- ini::simple_property_sptr sym_name_regex_prop =
- is_simple_property(section.find_property("symbol_name_regexp"));
regex_t_sptr symbol_name_regex;
- if (sym_name_regex_prop)
- symbol_name_regex =
- regex::compile(sym_name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "symbol_name_regexp", symbol_name_regex);
- ini::simple_property_sptr sym_name_not_regex_prop =
- is_simple_property(section.find_property("symbol_name_not_regexp"));
regex_t_sptr symbol_name_not_regex;
- if (sym_name_not_regex_prop)
- symbol_name_not_regex =
- regex::compile(sym_name_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "symbol_name_not_regexp", symbol_name_not_regex);
string symbol_version;
maybe_get_string_prop(section, "symbol_version", symbol_version);
- ini::simple_property_sptr sym_version_regex_prop =
- is_simple_property(section.find_property("symbol_version_regexp"));
regex_t_sptr symbol_version_regex;
- if (sym_version_regex_prop)
- symbol_version_regex =
- regex::compile(sym_version_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "symbol_version_regexp", symbol_version_regex);
string type_name_str;
maybe_get_string_prop(section, "type_name", type_name_str);
- ini::simple_property_sptr type_name_regex_prop =
- is_simple_property(section.find_property("type_name_regexp"));
regex_t_sptr type_name_regex;
- if (type_name_regex_prop)
- type_name_regex =
- regex::compile(type_name_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "type_name_regexp", type_name_regex);
result.reset(new variable_suppression(label_str,
name_str,
@@ -4250,32 +4172,17 @@ read_file_suppression(const ini::config::section& section)
string label_str;
maybe_get_string_prop(section, "label", label_str);
- ini::simple_property_sptr file_name_regex_prop =
- is_simple_property(section.find_property("file_name_regexp"));
regex_t_sptr file_name_regex;
- if (file_name_regex_prop)
- file_name_regex =
- regex::compile(file_name_regex_prop->get_value()->as_string());
-
- ini::simple_property_sptr file_name_not_regex_prop =
- is_simple_property(section.find_property("file_name_not_regexp"));
- regex_t_sptr file_name_not_regex;
- if (file_name_not_regex_prop)
- file_name_not_regex =
- regex::compile(file_name_not_regex_prop->get_value()->as_string());
-
- ini::simple_property_sptr soname_regex_prop =
- is_simple_property(section.find_property("soname_regexp"));
+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
+
+ regex_t_sptr file_name_not_regex;
+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
+
regex_t_sptr soname_regex;
- if (soname_regex_prop)
- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
- ini::simple_property_sptr soname_not_regex_prop =
- is_simple_property(section.find_property("soname_not_regexp"));
regex_t_sptr soname_not_regex;
- if (soname_not_regex_prop)
- soname_not_regex =
- regex::compile(soname_not_regex_prop->get_value()->as_string());
+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
result.reset(new file_suppression(label_str,
file_name_regex,