wayland_hook: make sure wl_handle is not null and lib is loaded

pull/1262/head
Alessandro Toia 2 months ago
parent 2aa604278e
commit 83af57a9b3

@ -18,42 +18,46 @@ struct wl_display* wl_display_ptr = nullptr;
EXPORT_C_(struct wl_display*) wl_display_connect(const char *name) EXPORT_C_(struct wl_display*) wl_display_connect(const char *name)
{ {
struct wl_display *ret = NULL; struct wl_display *ret = nullptr;
if(!wl_handle) if (!wl_handle) {
{
wl_handle = real_dlopen("libwayland-client.so", RTLD_LAZY); wl_handle = real_dlopen("libwayland-client.so", RTLD_LAZY);
wl_display_connect_ptr = (pwl_display_connect)real_dlsym(wl_handle, "wl_display_connect");
wl_display_connect_to_fd_ptr = (pwl_display_connect_to_fd)real_dlsym(wl_handle, "wl_display_connect_to_fd");
} }
ret = wl_display_connect_ptr(name); if (wl_handle) {
wl_display_connect_ptr = (pwl_display_connect)real_dlsym(wl_handle, "wl_display_connect");
wl_display_connect_to_fd_ptr = (pwl_display_connect_to_fd)real_dlsym(wl_handle, "wl_display_connect_to_fd");
if(!wl_display_ptr) ret = wl_display_connect_ptr(name);
wl_display_ptr = ret;
init_wayland_data(); if (!wl_display_ptr) {
wl_display_ptr = ret;
init_wayland_data();
}
}
return ret; return ret;
} }
EXPORT_C_(struct wl_display*) wl_display_connect_to_fd(int fd) EXPORT_C_(struct wl_display*) wl_display_connect_to_fd(int fd)
{ {
struct wl_display *ret = NULL; struct wl_display *ret = nullptr;
if(!wl_handle) if (!wl_handle) {
{
wl_handle = real_dlopen("libwayland-client.so", RTLD_LAZY); wl_handle = real_dlopen("libwayland-client.so", RTLD_LAZY);
wl_display_connect_to_fd_ptr = (pwl_display_connect_to_fd)real_dlsym(wl_handle, "wl_display_connect_to_fd");
wl_display_connect_ptr = (pwl_display_connect)real_dlsym(wl_handle, "wl_display_connect");
} }
ret = wl_display_connect_to_fd_ptr(fd); if (wl_handle) {
wl_display_connect_to_fd_ptr = (pwl_display_connect_to_fd)real_dlsym(wl_handle, "wl_display_connect_to_fd");
wl_display_connect_ptr = (pwl_display_connect)real_dlsym(wl_handle, "wl_display_connect");
if(!wl_display_ptr) ret = wl_display_connect_to_fd_ptr(fd);
wl_display_ptr = ret;
init_wayland_data(); if (!wl_display_ptr) {
wl_display_ptr = ret;
init_wayland_data();
}
}
return ret; return ret;
} }

Loading…
Cancel
Save