dbus_wrap.cpp 1019 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "config.h"
  2. #include "dbus_wrap.h"
  3. #if HAVE_DYNLOAD
  4. #include <mutex>
  5. #include <type_traits>
  6. #include "logging.h"
  7. void PrepareDBus()
  8. {
  9. const char *libname{"libdbus-1.so.3"};
  10. dbus_handle = LoadLib(libname);
  11. if(!dbus_handle)
  12. {
  13. WARN("Failed to load {}", libname);
  14. return;
  15. }
  16. auto load_func = [](auto &f, const char *name) -> void
  17. { f = reinterpret_cast<std::remove_reference_t<decltype(f)>>(GetSymbol(dbus_handle, name)); };
  18. #define LOAD_FUNC(x) do { \
  19. load_func(p##x, #x); \
  20. if(!p##x) \
  21. { \
  22. WARN("Failed to load function {}", #x); \
  23. CloseLib(dbus_handle); \
  24. dbus_handle = nullptr; \
  25. return; \
  26. } \
  27. } while(0);
  28. DBUS_FUNCTIONS(LOAD_FUNC)
  29. #undef LOAD_FUNC
  30. }
  31. #endif