- char* map_basename = xbt_basename(pathname);
-
- regmatch_t match;
- if (regexec(&res->so_re, map_basename, 1, &match, 0)) {
- free(map_basename);
- return nullptr;
- }
-
- char* libname = strndup(map_basename, match.rm_so);
- free(map_basename);
- map_basename = nullptr;
-
- // Strip the version suffix:
- if (libname && not regexec(&res->version_re, libname, 1, &match, 0)) {
- char* temp = libname;
- libname = strndup(temp, match.rm_so);
- free(temp);
+ static const std::regex so_re("\\.so[.0-9]*$");
+ static const std::regex version_re("-[.0-9-]*$");
+ std::string map_basename = simgrid::xbt::Path(pathname).getBasename();
+ std::string libname;
+
+ std::smatch match;
+ if (std::regex_search(map_basename, match, so_re)) {
+ libname = match.prefix();
+
+ // Strip the version suffix:
+ if (std::regex_search(libname, match, version_re))
+ libname = match.prefix();