From: Quentin Glidic <sardemff7+...@sardemff7.net>

Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net>
---
 ivi-shell/ivi-layout.c   |  3 ++-
 lib/libweston.c          | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 lib/libweston.h          |  2 ++
 src/compositor-drm.c     |  9 +++++----
 src/compositor-fbdev.c   |  3 ++-
 src/compositor-wayland.c |  5 +++--
 src/compositor-x11.c     |  5 +++--
 src/compositor.c         | 44 --------------------------------------------
 src/compositor.h         |  3 ---
 src/main.c               |  4 ++--
 10 files changed, 66 insertions(+), 59 deletions(-)

diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index f7c4f27..fe2e47f 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -60,6 +60,7 @@
 #include <string.h>
 #include <assert.h>
 
+#include "libweston.h"
 #include "compositor.h"
 #include "ivi-layout-export.h"
 #include "ivi-layout-private.h"
@@ -2853,7 +2854,7 @@ load_controller_modules(struct weston_compositor 
*compositor, const char *module
                end = strchrnul(p, ',');
                snprintf(buffer, sizeof buffer, "%.*s", (int)(end - p), p);
 
-               controller_module_init = weston_load_module(buffer, 
"controller_module_init");
+               controller_module_init = libweston_load_module(buffer, 
"controller_module_init");
                if (!controller_module_init)
                        return -1;
 
diff --git a/lib/libweston.c b/lib/libweston.c
index 801d137..da21f8e 100644
--- a/lib/libweston.c
+++ b/lib/libweston.c
@@ -1,3 +1,7 @@
+
+#include <limits.h>
+#include <dlfcn.h>
+
 #include "shared/zalloc.h"
 
 #include "libweston-internal.h"
@@ -22,6 +26,49 @@ libweston_uninit(struct libweston_context *context)
        free(context);
 }
 
+WL_EXPORT void *
+libweston_load_module(const char *name, const char *entrypoint)
+{
+       const char *builddir = getenv("WESTON_BUILD_DIR");
+       char path[PATH_MAX];
+       void *module, *init;
+
+       if (name == NULL)
+               return NULL;
+
+       if (name[0] != '/') {
+               if (builddir)
+                       snprintf(path, sizeof path, "%s/.libs/%s", builddir, 
name);
+               else
+                       snprintf(path, sizeof path, "%s/%s", MODULEDIR, name);
+       } else {
+               snprintf(path, sizeof path, "%s", name);
+       }
+
+       module = dlopen(path, RTLD_NOW | RTLD_NOLOAD);
+       if (module) {
+               weston_log("Module '%s' already loaded\n", path);
+               dlclose(module);
+               return NULL;
+       }
+
+       weston_log("Loading module '%s'\n", path);
+       module = dlopen(path, RTLD_NOW);
+       if (!module) {
+               weston_log("Failed to load module: %s\n", dlerror());
+               return NULL;
+       }
+
+       init = dlsym(module, entrypoint);
+       if (!init) {
+               weston_log("Failed to lookup init function: %s\n", dlerror());
+               dlclose(module);
+               return NULL;
+       }
+
+       return init;
+}
+
 WL_EXPORT int
 libweston_load_backend(struct libweston_context *context, enum 
libweston_backend preffered)
 {
diff --git a/lib/libweston.h b/lib/libweston.h
index ca98df1..9d1bfc1 100644
--- a/lib/libweston.h
+++ b/lib/libweston.h
@@ -9,6 +9,8 @@ struct libweston_context;
 struct libweston_context *libweston_init(struct weston_compositor *compositor);
 void libweston_uninit(struct libweston_context *context);
 
+void *libweston_load_module(const char *name, const char *entrypoint);
+
 enum libweston_backend {
        LIBWESTON_BACKEND_NONE = 0,
 };
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 8b9882e..04de95e 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -46,6 +46,7 @@
 #include <gbm.h>
 #include <libudev.h>
 
+#include "libweston.h"
 #include "shared/helpers.h"
 #include "shared/timespec-util.h"
 #include "libbacklight.h"
@@ -608,13 +609,13 @@ drm_output_set_gamma(struct weston_output *output_base,
 }
 
 /* Determine the type of vblank synchronization to use for the output.
- * 
+ *
  * The pipe parameter indicates which CRTC is in use.  Knowing this, we
  * can determine which vblank sequence type to use for it.  Traditional
  * cards had only two CRTCs, with CRTC 0 using no special flags, and
  * CRTC 1 using DRM_VBLANK_SECONDARY.  The first bit of the pipe
  * parameter indicates this.
- * 
+ *
  * Bits 1-5 of the pipe parameter are 5 bit wide pipe number between
  * 0-31.  If this is non-zero it indicates we're dealing with a
  * multi-gpu situation and we need to calculate the vblank sync
@@ -1525,8 +1526,8 @@ create_gbm_device(int fd)
 {
        struct gbm_device *gbm;
 
-       gl_renderer = weston_load_module("gl-renderer.so",
-                                        "gl_renderer_interface");
+       gl_renderer = libweston_load_module("gl-renderer.so",
+                                           "gl_renderer_interface");
        if (!gl_renderer)
                return NULL;
 
diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
index 36d7ae0..e46b5cf 100644
--- a/src/compositor-fbdev.c
+++ b/src/compositor-fbdev.c
@@ -42,6 +42,7 @@
 
 #include <libudev.h>
 
+#include "libweston.h"
 #include "shared/helpers.h"
 #include "compositor.h"
 #include "launcher-util.h"
@@ -790,7 +791,7 @@ fbdev_backend_create(struct weston_compositor *compositor, 
int *argc, char *argv
                if (pixman_renderer_init(compositor) < 0)
                        goto out_launcher;
        } else {
-               gl_renderer = weston_load_module("gl-renderer.so",
+               gl_renderer = libweston_load_module("gl-renderer.so",
                                                 "gl_renderer_interface");
                if (!gl_renderer) {
                        weston_log("could not load gl renderer\n");
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index d1c020d..244807a 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -39,6 +39,7 @@
 #include <wayland-egl.h>
 #include <wayland-cursor.h>
 
+#include "libweston.h"
 #include "compositor.h"
 #include "gl-renderer.h"
 #include "pixman-renderer.h"
@@ -2240,8 +2241,8 @@ wayland_backend_create(struct weston_compositor 
*compositor, int use_pixman,
        b->use_pixman = use_pixman;
 
        if (!b->use_pixman) {
-               gl_renderer = weston_load_module("gl-renderer.so",
-                                                "gl_renderer_interface");
+               gl_renderer = libweston_load_module("gl-renderer.so",
+                                                   "gl_renderer_interface");
                if (!gl_renderer)
                        b->use_pixman = 1;
        }
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index b70c119..cac96cb 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -49,6 +49,7 @@
 
 #include <xkbcommon/xkbcommon.h>
 
+#include "libweston.h"
 #include "compositor.h"
 #include "gl-renderer.h"
 #include "pixman-renderer.h"
@@ -1552,8 +1553,8 @@ init_gl_renderer(struct x11_backend *b)
 {
        int ret;
 
-       gl_renderer = weston_load_module("gl-renderer.so",
-                                        "gl_renderer_interface");
+       gl_renderer = libweston_load_module("gl-renderer.so",
+                                           "gl_renderer_interface");
        if (!gl_renderer)
                return -1;
 
diff --git a/src/compositor.c b/src/compositor.c
index 56eefc4..5b698d1 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -44,7 +44,6 @@
 #include <unistd.h>
 #include <math.h>
 #include <linux/input.h>
-#include <dlfcn.h>
 #include <signal.h>
 #include <setjmp.h>
 #include <sys/time.h>
@@ -4964,49 +4963,6 @@ weston_version(int *major, int *minor, int *micro)
        *micro = WESTON_VERSION_MICRO;
 }
 
-WL_EXPORT void *
-weston_load_module(const char *name, const char *entrypoint)
-{
-       const char *builddir = getenv("WESTON_BUILD_DIR");
-       char path[PATH_MAX];
-       void *module, *init;
-
-       if (name == NULL)
-               return NULL;
-
-       if (name[0] != '/') {
-               if (builddir)
-                       snprintf(path, sizeof path, "%s/.libs/%s", builddir, 
name);
-               else
-                       snprintf(path, sizeof path, "%s/%s", MODULEDIR, name);
-       } else {
-               snprintf(path, sizeof path, "%s", name);
-       }
-
-       module = dlopen(path, RTLD_NOW | RTLD_NOLOAD);
-       if (module) {
-               weston_log("Module '%s' already loaded\n", path);
-               dlclose(module);
-               return NULL;
-       }
-
-       weston_log("Loading module '%s'\n", path);
-       module = dlopen(path, RTLD_NOW);
-       if (!module) {
-               weston_log("Failed to load module: %s\n", dlerror());
-               return NULL;
-       }
-
-       init = dlsym(module, entrypoint);
-       if (!init) {
-               weston_log("Failed to lookup init function: %s\n", dlerror());
-               dlclose(module);
-               return NULL;
-       }
-
-       return init;
-}
-
 
 /** Destroys the compositor.
  *
diff --git a/src/compositor.h b/src/compositor.h
index 10dd641..7b6b013 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -1691,9 +1691,6 @@ weston_transformed_region(int width, int height,
                          int32_t scale,
                          pixman_region32_t *src, pixman_region32_t *dest);
 
-void *
-weston_load_module(const char *name, const char *entrypoint);
-
 int
 weston_parse_transform(const char *transform, uint32_t *out);
 
diff --git a/src/main.c b/src/main.c
index 922e46e..2425fda 100644
--- a/src/main.c
+++ b/src/main.c
@@ -479,7 +479,7 @@ load_modules(struct weston_compositor *ec, const char 
*modules,
        while (*p) {
                end = strchrnul(p, ',');
                snprintf(buffer, sizeof buffer, "%.*s", (int) (end - p), p);
-               module_init = weston_load_module(buffer, "module_init");
+               module_init = libweston_load_module(buffer, "module_init");
                if (!module_init)
                        return -1;
                if (module_init(ec, argc, argv) < 0)
@@ -647,7 +647,7 @@ load_backend_old(struct weston_compositor *compositor, 
const char *backend,
                            struct weston_config *config,
                            struct weston_backend_config *config_base);
 
-       backend_init = weston_load_module(backend, "backend_init");
+       backend_init = libweston_load_module(backend, "backend_init");
        if (!backend_init)
                return -1;
 
-- 
2.6.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to