From dbe089746f9ae84456f3c5dafa392190a88db2d1 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Sun, 27 Aug 2023 00:24:15 +0400 Subject: [PATCH] Re-use base_linux_library --- .../hime_im_client/hime_im_client_helper.cpp | 67 ++++++------------- 1 file changed, 19 insertions(+), 48 deletions(-) diff --git a/external/hime_qt/hime_im_client/hime_im_client_helper.cpp b/external/hime_qt/hime_im_client/hime_im_client_helper.cpp index 7ad8ed6..ffb1a95 100644 --- a/external/hime_qt/hime_im_client/hime_im_client_helper.cpp +++ b/external/hime_qt/hime_im_client/hime_im_client_helper.cpp @@ -4,13 +4,10 @@ // For license and copyright information please follow this link: // https://github.com/desktop-app/legal/blob/master/LEGAL // -#include +#include "base/platform/linux/base_linux_library.h" + #include #include -#include -#include - -#define LOAD_SYMBOL(handle, func) LoadSymbol(handle, #func, func) namespace HimeHelper { namespace { @@ -50,51 +47,25 @@ void (*hime_im_client_set_client_window)( const Window win); void (*hime_im_client_set_window)(HIME_client_handle *handle, Window win); -struct HandleDeleter { - void operator()(void *handle) { - dlclose(handle); - } -}; - -using Handle = std::unique_ptr; - -bool LoadLibrary(Handle &handle, const char *name) { - handle = Handle(dlopen(name, RTLD_LAZY | RTLD_NODELETE)); - if (handle) { - return true; - } - std::cerr << dlerror() << std::endl; - return false; -} - -template -inline bool LoadSymbol(const Handle &handle, const char *name, Function &func) { - func = handle - ? reinterpret_cast(dlsym(handle.get(), name)) - : nullptr; - if (const auto error = dlerror()) { - std::cerr << error << std::endl; - } - return (func != nullptr); -} - bool Resolve() { static const auto loaded = [&] { - auto lib = Handle(); - return LoadLibrary(lib, "libhime-im-client.so.1") - && LOAD_SYMBOL(lib, hime_im_client_close) - && LOAD_SYMBOL(lib, hime_im_client_focus_in) - && LOAD_SYMBOL(lib, hime_im_client_focus_out) - && LOAD_SYMBOL(lib, hime_im_client_focus_out2) - && LOAD_SYMBOL(lib, hime_im_client_forward_key_press) - && LOAD_SYMBOL(lib, hime_im_client_forward_key_release) - && LOAD_SYMBOL(lib, hime_im_client_get_preedit) - && LOAD_SYMBOL(lib, hime_im_client_open) - && LOAD_SYMBOL(lib, hime_im_client_reset) - && LOAD_SYMBOL(lib, hime_im_client_set_cursor_location) - && LOAD_SYMBOL(lib, hime_im_client_set_flags) - && (LOAD_SYMBOL(lib, hime_im_client_set_client_window) - || LOAD_SYMBOL(lib, hime_im_client_set_window)); + const auto lib = base::Platform::LoadLibrary( + "libhime-im-client.so.1", + RTLD_NODELETE); + return lib + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_close) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_focus_in) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_focus_out) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_focus_out2) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_forward_key_press) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_forward_key_release) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_get_preedit) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_open) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_reset) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_set_cursor_location) + && LOAD_LIBRARY_SYMBOL(lib, hime_im_client_set_flags) + && (LOAD_LIBRARY_SYMBOL(lib, hime_im_client_set_client_window) + || LOAD_LIBRARY_SYMBOL(lib, hime_im_client_set_window)); }(); return loaded; }