33 LibraryManager::LibraryManager(
const std::string& name,
int index,
34 const boost::shared_ptr<CalloutManager>& manager)
35 : dl_handle_(NULL), index_(index), manager_(manager),
41 "instantiating a LibraryManager object");
53 : dl_handle_(NULL), index_(-1), manager_(), library_name_(name)
76 dl_handle_ = dlopen(library_name_.c_str(), RTLD_NOW | RTLD_LOCAL);
77 if (dl_handle_ == NULL) {
82 return (dl_handle_ != NULL);
92 if (dl_handle_ != NULL) {
93 status = dlclose(dl_handle_);
101 return (status == 0);
112 int version = KEA_HOOKS_VERSION - 1;
120 if (
version == KEA_HOOKS_VERSION) {
123 .arg(library_name_).arg(
version);
128 .arg(
version).arg(KEA_HOOKS_VERSION);
143 manager_->setLibraryIndex(index_);
147 for (
size_t i = 0; i < hook_names.size(); ++i) {
150 void* dlsym_ptr = dlsym(dl_handle_, hook_names[i].c_str());
154 manager_->getLibraryHandle().registerCallout(hook_names[i],
157 HOOKS_STD_CALLOUT_REGISTERED).arg(library_name_)
158 .arg(hook_names[i]).arg(dlsym_ptr);
179 manager_->setLibraryIndex(index_);
180 status = (*pc.
loadPtr())(manager_->getLibraryHandle());
183 .arg(library_name_).arg(ex.
what());
225 .arg(library_name_).arg(ex.
what());
318 if (dl_handle_ != NULL) {
330 manager_->setLibraryIndex(index_);
331 for (
size_t i = 0; i < hooks.size(); ++i) {
332 bool removed = manager_->deregisterAllCallouts(hooks[i]);
335 .arg(hooks[i]).arg(library_name_);