Use a raii_wrapper for the char array returned by abi::__cxa_demangle
This commit is contained in:
parent
9c0d0db884
commit
26ef617c25
@ -39,13 +39,14 @@ namespace detail {
|
|||||||
// it appears safe to pass nullptr for status however the docs don't explicitly say it's safe so I don't
|
// it appears safe to pass nullptr for status however the docs don't explicitly say it's safe so I don't
|
||||||
// want to rely on it
|
// want to rely on it
|
||||||
int status;
|
int status;
|
||||||
char* const demangled = abi::__cxa_demangle(to_demangle.get().c_str() + offset, nullptr, nullptr, &status);
|
auto demangled = raii_wrap(
|
||||||
|
abi::__cxa_demangle(to_demangle.get().c_str() + offset, nullptr, nullptr, &status),
|
||||||
|
[] (char* str) { std::free(str); }
|
||||||
|
);
|
||||||
// demangled will always be nullptr on non-zero status, and if __cxa_demangle ever fails for any reason
|
// demangled will always be nullptr on non-zero status, and if __cxa_demangle ever fails for any reason
|
||||||
// we'll just quietly return the mangled name
|
// we'll just quietly return the mangled name
|
||||||
if(demangled) {
|
if(demangled.get()) {
|
||||||
// TODO: raii_wrap the char*?
|
std::string str = demangled.get();
|
||||||
std::string str = demangled;
|
|
||||||
std::free(demangled);
|
|
||||||
if(!rest.empty()) {
|
if(!rest.empty()) {
|
||||||
str += rest;
|
str += rest;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user