diff options
| author | lizzie <lizzie@eden-emu.dev> | 2025-10-17 22:12:58 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-10-17 22:12:58 +0200 |
| commit | 3e8fe622a7d1dc8ff9d3a34d975b556b8fd35a94 (patch) | |
| tree | 374efb4578d3d99aef4564b1d6e13973aa8e9ac3 /src/common/demangle.cpp | |
| parent | 1c90b099d3eb7991462b82dae340c3f8743e1755 (diff) | |
[compat] Solaris build fixes for openssl, catch2; NetBSD build fixes (#2752)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2752
Reviewed-by: Shinmegumi <shinmegumi@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/common/demangle.cpp')
| -rw-r--r-- | src/common/demangle.cpp | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/src/common/demangle.cpp b/src/common/demangle.cpp index b2c9d126aa..8cb8c35515 100644 --- a/src/common/demangle.cpp +++ b/src/common/demangle.cpp @@ -1,6 +1,11 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include <string> +#include <string_view> #include <llvm/Demangle/Demangle.h> #include "common/demangle.h" @@ -9,29 +14,22 @@ namespace Common { std::string DemangleSymbol(const std::string& mangled) { - auto is_itanium = [](const std::string& name) -> bool { - // A valid Itanium encoding requires 1-4 leading underscores, followed by 'Z'. - auto pos = name.find_first_not_of('_'); - return pos > 0 && pos <= 4 && pos < name.size() && name[pos] == 'Z'; - }; - - if (mangled.empty()) { - return mangled; - } - - char* demangled = nullptr; - SCOPE_EXIT { - std::free(demangled); - }; - - if (is_itanium(mangled)) { - demangled = llvm::itaniumDemangle(mangled.c_str()); - } - - if (!demangled) { - return mangled; + if (mangled.size() > 0) { + auto const is_itanium = [](std::string_view name) -> bool { + // A valid Itanium encoding requires 1-4 leading underscores, followed by 'Z'. + auto const pos = name.find_first_not_of('_'); + return pos > 0 && pos <= 4 && pos < name.size() && name[pos] == 'Z'; + }; + std::string ret = mangled; + if (is_itanium(mangled)) { + if (char* p = llvm::itaniumDemangle(mangled); p != nullptr) { + ret = std::string{p}; + std::free(p); + } + } + return ret; } - return demangled; + return std::string{}; } } // namespace Common |
