sdm: Add DynLib utility for dynamic library lifecycle management.
- Add DynLib utility to automatically unload libraries upon
destruction of the utility object.
CRs-Fixed: 1029997
Change-Id: I4e13ad984949db170498fe1ec5c133fa4a798bdd
diff --git a/sdm/libs/utils/sys.cpp b/sdm/libs/utils/sys.cpp
index 6dddcfb..0ce524e 100644
--- a/sdm/libs/utils/sys.cpp
+++ b/sdm/libs/utils/sys.cpp
@@ -62,5 +62,33 @@
#endif // SDM_VIRTUAL_DRIVER
+DynLib::~DynLib() {
+ Close();
+}
+
+bool DynLib::Open(const char *lib_name) {
+ Close();
+ lib_ = ::dlopen(lib_name, RTLD_NOW);
+
+ return (*this);
+}
+
+bool DynLib::Sym(const char *func_name, void **func_ptr) {
+ if (lib_) {
+ *func_ptr = ::dlsym(lib_, func_name);
+ } else {
+ *func_ptr = NULL;
+ }
+
+ return (*func_ptr != NULL);
+}
+
+void DynLib::Close() {
+ if (lib_) {
+ ::dlclose(lib_);
+ lib_ = NULL;
+ }
+}
+
} // namespace sdm