diff --git a/libpkg/algo/licenses.cpp b/libpkg/algo/licenses.cpp index 2c7cdca..e0f7b72 100644 --- a/libpkg/algo/licenses.cpp +++ b/libpkg/algo/licenses.cpp @@ -49,7 +49,7 @@ std::string Config::addLicenseInfo(LicenseResult &result, PackageSearchResult &s // * use the real project name if known const auto upstreamVersion = PackageVersion::fromString(package->version).upstream; auto regularPackageName = package->computeRegularPackageName(); - auto packageID = regularPackageName.empty() ? package->name : regularPackageName; + auto packageID = regularPackageName.empty() ? package->name : std::string(regularPackageName); static const auto displayNames = unordered_map{ { "mingw-w64-headers", "MinGW-w64" }, { "gcc", "GCC" }, @@ -140,7 +140,7 @@ std::string Config::addLicenseInfo(LicenseResult &result, PackageSearchResult &s // read custom license if (!regularPackageName.empty()) { - const auto regularPackageSearchResult = findPackage(Dependency(regularPackageName, package->version)); + const auto regularPackageSearchResult = findPackage(Dependency(packageID, package->version)); if (regularPackageSearchResult.pkg) { const auto regularUpstreamVersion = PackageVersion::fromString(regularPackageSearchResult.pkg->version).upstream; if (upstreamVersion != regularUpstreamVersion) { diff --git a/libpkg/data/package.cpp b/libpkg/data/package.cpp index 70b3e48..1ecfd00 100644 --- a/libpkg/data/package.cpp +++ b/libpkg/data/package.cpp @@ -328,25 +328,32 @@ string LibPkg::Package::computeFileName(const char *extension) const return argsToString(name, '-', version, '-', arch, '.', extension); } -string LibPkg::PackageBase::computeRegularPackageName() const +std::string_view LibPkg::PackageBase::computeRegularPackageName() const { if (name == "mingw-w64-headers" || name == "mingw-w64-crt") { - return string(); + return std::string_view(); } - if (startsWith(name, "lib32-")) { - return name.substr(strlen("lib32-")); - } else if (startsWith(name, "mingw-w64-")) { - return name.substr(strlen("mingw-w64-")); - } else if (startsWith(name, "android-aarch64-")) { - return name.substr(strlen("android-aarch64-")); - } else if (startsWith(name, "android-x86-64-")) { - return name.substr(strlen("android-x86-64-")); - } else if (startsWith(name, "android-x86-")) { - return name.substr(strlen("android-x86-")); - } else if (startsWith(name, "android-armv7a-eabi-")) { - return name.substr(strlen("android-armv7a-eabi-")); + static constexpr std::string_view prefixes[] = { + "lib32-", + "mingw-w64-", + "android-aarch64-", + "android-x86-64-", + "android-x86-", + "android-armv7a-eabi-", + "static-compat-", + }; + for (const auto prefix : prefixes) { + if (name.starts_with(prefix)) { + return std::string_view(name).substr(prefix.size()); + } } - return string(); + static constexpr std::string_view suffixes[] = { "-static-compat" }; + for (const auto suffix : suffixes) { + if (name.ends_with(suffix)) { + return std::string_view(name.data(), name.size() - suffix.size()); + } + } + return std::string_view(); } void PackageBase::clear() diff --git a/libpkg/data/package.h b/libpkg/data/package.h index d60fcc8..d97464f 100644 --- a/libpkg/data/package.h +++ b/libpkg/data/package.h @@ -385,7 +385,7 @@ struct LIBPKG_EXPORT PackageBase : public ReflectiveRapidJSON::JsonSerializable< bool isSame(const PackageBase &other) const; PackageVersionComparison compareVersion(const PackageBase &other) const; - std::string computeRegularPackageName() const; + std::string_view computeRegularPackageName() const; void clear(); PackageOrigin origin = PackageOrigin::Default;