c7813e07e4
Allow people to use their own emitters held in a shared library. Put a trivial emitter in contrib/ as an example.
30 lines
763 B
C++
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);
|
|
}
|
|
|
|
//----------------------------------------------------------------
|