| #pragma once |
| |
| namespace blobs |
| { |
| |
| namespace internal |
| { |
| /** |
| * Interface to the dynamic library loader. |
| */ |
| class DlSysInterface |
| { |
| public: |
| virtual ~DlSysInterface() = default; |
| |
| /** |
| * obtain error diagnostic for functions in the dlopen API |
| * |
| * @return the error details |
| */ |
| virtual const char* dlerror() const = 0; |
| |
| /** |
| * open a shared object |
| * |
| * @param[in] filename - the path to the shared object or the filename to |
| * for searching |
| * @param[in] flags - the flags |
| * @return a handle to the shared object (null on failure) |
| */ |
| virtual void* dlopen(const char* filename, int flags) const = 0; |
| |
| /** |
| * obtain address of a symbol in a shared object or executable |
| * |
| * @param[in] handle - pointer to shared object |
| * @param[in] symbol - name of the symbol to find |
| * @return the address of the symbol if found (null otherwise) |
| */ |
| virtual void* dlsym(void* handle, const char* symbol) const = 0; |
| }; |
| |
| class DlSysImpl : public DlSysInterface |
| { |
| public: |
| const char* dlerror() const override; |
| void* dlopen(const char* filename, int flags) const override; |
| void* dlsym(void* handle, const char* symbol) const override; |
| }; |
| |
| extern DlSysImpl dlsys_impl; |
| |
| } // namespace internal |
| } // namespace blobs |