blob: 1b0a8a736375fc1ad91807fa12c0bfbd8134a539 [file] [log] [blame]
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "wpi/Demangle.h"
#include <windows.h> // NOLINT(build/include_order)
#include <dbghelp.h>
#include "wpi/SmallString.h"
#include "wpi/mutex.h"
#pragma comment(lib, "Dbghelp.lib")
namespace wpi {
std::string Demangle(std::string_view mangledSymbol) {
static wpi::mutex m;
std::scoped_lock lock(m);
SmallString<128> buf{mangledSymbol};
char buffer[256];
DWORD sz = UnDecorateSymbolName(buf.c_str(), buffer, sizeof(buffer),
UNDNAME_COMPLETE);
if (sz == 0)
return std::string{mangledSymbol};
return std::string(buffer, sz);
}
} // namespace wpi