summaryrefslogtreecommitdiffstats
path: root/utils.cpp
diff options
context:
space:
mode:
authorPatrick Venture <venture@google.com>2018-09-27 15:00:46 -0700
committerPatrick Venture <venture@google.com>2018-09-30 08:11:25 -0700
commit4dc584db905b3fe4d2f5aa6bdf647b21512b4dee (patch)
treeb8fe7be417d1c4beabafb3d072dfffe852207a88 /utils.cpp
parentb3e07e2b63bb37b319f942604b5a94f0f13bc486 (diff)
downloadphosphor-ipmi-blobs-4dc584db905b3fe4d2f5aa6bdf647b21512b4dee.tar.gz
phosphor-ipmi-blobs-4dc584db905b3fe4d2f5aa6bdf647b21512b4dee.zip
utils: add methods for finding and loading handlers
This module provides a couple basic methods for enumerating and then loading handlers. Change-Id: I4f58be313190c48de25c2b9578b7c622afefc656 Signed-off-by: Patrick Venture <venture@google.com>
Diffstat (limited to 'utils.cpp')
-rw-r--r--utils.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/utils.cpp b/utils.cpp
new file mode 100644
index 0000000..1daa3c9
--- /dev/null
+++ b/utils.cpp
@@ -0,0 +1,37 @@
+#include "utils.hpp"
+
+#include <dlfcn.h>
+
+#include <experimental/filesystem>
+#include <phosphor-logging/log.hpp>
+#include <regex>
+
+namespace blobs
+{
+
+namespace fs = std::experimental::filesystem;
+using namespace phosphor::logging;
+
+void loadLibraries(const std::string& path)
+{
+ void* libHandle = NULL;
+
+ for (const auto& p : fs::recursive_directory_iterator(path))
+ {
+ auto ps = p.path().string();
+
+ if (!std::regex_match(ps, std::regex(".+\\.so$")))
+ {
+ continue;
+ }
+
+ libHandle = dlopen(ps.c_str(), RTLD_NOW);
+ if (!libHandle)
+ {
+ log<level::ERR>("ERROR opening", entry("HANDLER=%s", ps.c_str()),
+ entry("ERROR=%s", dlerror()));
+ }
+ }
+}
+
+} // namespace blobs
OpenPOWER on IntegriCloud