mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-12-01 18:16:14 +02:00
diff-closures: remove gratuitous copy
This was done originally because std::smatch does not accept `const char
*` as iterators. However, this was because we should have been using
std::cmatch instead.
(cherry picked from commit 12a5838d11
)
This commit is contained in:
parent
492715c0bb
commit
07aeedd37e
1 changed files with 4 additions and 11 deletions
|
@ -25,24 +25,17 @@ GroupedPaths getClosureInfo(ref<Store> store, const StorePath & toplevel)
|
||||||
|
|
||||||
GroupedPaths groupedPaths;
|
GroupedPaths groupedPaths;
|
||||||
|
|
||||||
for (auto & path : closure) {
|
for (auto const & path : closure) {
|
||||||
/* Strip the output name. Unfortunately this is ambiguous (we
|
/* Strip the output name. Unfortunately this is ambiguous (we
|
||||||
can't distinguish between output names like "bin" and
|
can't distinguish between output names like "bin" and
|
||||||
version suffixes like "unstable"). */
|
version suffixes like "unstable"). */
|
||||||
static std::regex regex("(.*)-([a-z]+|lib32|lib64)");
|
static std::regex regex("(.*)-([a-z]+|lib32|lib64)");
|
||||||
std::smatch match;
|
std::cmatch match;
|
||||||
std::string name{path.name()};
|
std::string name{path.name()};
|
||||||
// Used to keep name alive through being potentially overwritten below
|
std::string_view const origName = path.name();
|
||||||
// (to not invalidate the references from the regex result)
|
|
||||||
//
|
|
||||||
// n.b. cannot be just path.name().{begin,end}() since that returns const
|
|
||||||
// char *, which does not, for some reason, convert as required on
|
|
||||||
// libstdc++. Seems like a libstdc++ bug or standard bug to me... we
|
|
||||||
// can afford the allocation in any case.
|
|
||||||
const std::string origName{path.name()};
|
|
||||||
std::string outputName;
|
std::string outputName;
|
||||||
|
|
||||||
if (std::regex_match(origName, match, regex)) {
|
if (std::regex_match(origName.begin(), origName.end(), match, regex)) {
|
||||||
name = match[1];
|
name = match[1];
|
||||||
outputName = match[2];
|
outputName = match[2];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue