thin-provisioning-tools/thin-provisioning/shared_library_emitter.cc
Joe Thornber c7813e07e4 [thin_dump] --format custom=<shared lib>
Allow people to use their own emitters held in a shared library.

Put a trivial emitter in contrib/ as an example.
2016-03-24 13:59:08 +00:00

30 lines
763 B
C++

#include "thin-provisioning/shared_library_emitter.h"
#include <dlfcn.h>
#include <stdexcept>
using namespace std;
using namespace thin_provisioning;
//----------------------------------------------------------------
emitter::ptr
thin_provisioning::create_custom_emitter(string const &shared_lib, ostream &out)
{
emitter::ptr (*create_fn)(ostream &out);
void *handle = dlopen(shared_lib.c_str(), RTLD_LAZY);
if (!handle)
throw runtime_error(dlerror());
dlerror(); // Clear any existing error
create_fn = reinterpret_cast<emitter::ptr (*)(ostream &)>(dlsym(handle, "create_emitter"));
char *error = dlerror();
if (error)
throw runtime_error(error);
return create_fn(out);
}
//----------------------------------------------------------------