mirror of
https://github.com/falcosecurity/falco.git
synced 2026-03-18 18:58:41 +00:00
update: library management code
Signed-off-by: Lorenzo Fontana <lo@linux.com>
This commit is contained in:
@@ -34,4 +34,11 @@ class hawk_library_load_exception : public hawk_library_exception
|
||||
hawk_library_load_exception(const std::string&library_name, const std::string&message):
|
||||
hawk_library_exception("library loading error, library: " + library_name + " error: " + message) {}
|
||||
};
|
||||
|
||||
class hawk_library_unload_exception : public hawk_library_exception
|
||||
{
|
||||
public:
|
||||
hawk_library_unload_exception(const std::string&library_name, const std::string&message):
|
||||
hawk_library_exception("library unloading error, library: " + library_name + " error: " + message) {}
|
||||
};
|
||||
} // namespace libhawk
|
||||
|
||||
@@ -19,16 +19,41 @@ limitations under the License.
|
||||
|
||||
#include <dlfcn.h>
|
||||
|
||||
libhawk::library::library(const std::string &filename) : m_library_filename(filename) {};
|
||||
libhawk::library::library(const std::string &filename):
|
||||
m_library_filename(filename){};
|
||||
|
||||
bool libhawk::library::load()
|
||||
{
|
||||
void *handler = nullptr;
|
||||
library_handle handler = nullptr;
|
||||
handler = dlopen(m_library_filename.c_str(), RTLD_NOW);
|
||||
if (!handler) {
|
||||
if(!handler)
|
||||
{
|
||||
std::string errmsg(dlerror());
|
||||
throw hawk_library_load_exception(m_library_filename, errmsg);
|
||||
}
|
||||
//todo(fntlnz): need to store the handler or anything to use the library?
|
||||
m_library_handle.store(handler);
|
||||
return (handler != nullptr);
|
||||
}
|
||||
|
||||
bool libhawk::library::unload()
|
||||
{
|
||||
if(!m_library_handle.load())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
library_handle handler = m_library_handle.load();
|
||||
if(!dlclose(handler))
|
||||
{
|
||||
std::string errmsg(dlerror());
|
||||
throw hawk_library_unload_exception(m_library_filename, errmsg);
|
||||
return false;
|
||||
}
|
||||
m_library_handle.store(nullptr);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool libhawk::library::is_loaded() const
|
||||
{
|
||||
return m_library_handle && m_library_handle.load();
|
||||
}
|
||||
|
||||
@@ -17,15 +17,22 @@ limitations under the License.
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <atomic>
|
||||
|
||||
namespace libhawk
|
||||
{
|
||||
class library
|
||||
{
|
||||
public:
|
||||
using library_handle = void *;
|
||||
library(const std::string &filename);
|
||||
bool load();
|
||||
bool unload();
|
||||
bool is_loaded() const;
|
||||
~library();
|
||||
|
||||
private:
|
||||
std::string m_library_filename;
|
||||
std::atomic<library_handle> m_library_handle;
|
||||
};
|
||||
}; // namespace libhawk
|
||||
|
||||
Reference in New Issue
Block a user