mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-05 14:02:21 +00:00
27 lines
999 B
C++
27 lines
999 B
C++
#include "getResource.h"
|
|
#include "unaligned.h"
|
|
#include <dlfcn.h>
|
|
#include <string>
|
|
#include <boost/algorithm/string/replace.hpp>
|
|
|
|
|
|
std::string_view getResource(std::string_view name)
|
|
{
|
|
std::string name_replaced(name);
|
|
std::replace(name_replaced.begin(), name_replaced.end(), '/', '_');
|
|
std::replace(name_replaced.begin(), name_replaced.end(), '-', '_');
|
|
std::replace(name_replaced.begin(), name_replaced.end(), '.', '_');
|
|
boost::replace_all(name_replaced, "+", "_PLUS_");
|
|
|
|
/// These are the names that are generated by "ld -r -b binary"
|
|
std::string symbol_name_data = "_binary_" + name_replaced + "_start";
|
|
std::string symbol_name_size = "_binary_" + name_replaced + "_size";
|
|
|
|
const void * sym_data = dlsym(RTLD_DEFAULT, symbol_name_data.c_str());
|
|
const void * sym_size = dlsym(RTLD_DEFAULT, symbol_name_size.c_str());
|
|
|
|
if (sym_data && sym_size)
|
|
return { static_cast<const char *>(sym_data), unalignedLoad<size_t>(&sym_size) };
|
|
return {};
|
|
}
|