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

This is to be used by tests or when developping to load modules directly
from the build tree

Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net>
---
 man/weston.man   | 5 +++--
 src/compositor.c | 9 ++++++---
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/man/weston.man b/man/weston.man
index 39d854b..50c8ba1 100644
--- a/man/weston.man
+++ b/man/weston.man
@@ -99,7 +99,8 @@ Load
 .I backend.so
 instead of the default backend. The file is searched for in
 .IR "__weston_modules_dir__" ,
-or you can pass an absolute path. The default backend is 
+or you can pass a path (absolute, .-relative or ..-relative). The default 
+backend is
 .I __weston_native_backend__
 unless the environment suggests otherwise, see
 .IR DISPLAY " and " WAYLAND_DISPLAY .
@@ -128,7 +129,7 @@ instead of writing them to stderr.
 Load the comma-separated list of modules. Only used by the test
 suite. The file is searched for in
 .IR "__weston_modules_dir__" ,
-or you can pass an absolute path.
+or you can pass a path (absolute, .-relative or ..-relative).
 .TP
 \fB\-\^S\fR\fIname\fR, \fB\-\-socket\fR=\fIname\fR
 Weston will listen in the Wayland socket called
diff --git a/src/compositor.c b/src/compositor.c
index 37fce0a..29510f1 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -3021,10 +3021,13 @@ load_module(const char *name, const char *entrypoint)
        char path[PATH_MAX];
        void *module, *init;
 
-       if (name[0] != '/')
-               snprintf(path, sizeof path, "%s/%s", MODULEDIR, name);
+       if (name[0] == '/' || /* If the path is absolute or .. */
+           (name[0] == '.' && /* ... relative to ... */
+            (name[1] == '/' || /* ... current dir or ... */
+             (name[1] == '.' && name[2] == '/')))) /* ... parent dir ... */
+               snprintf(path, sizeof path, "%s", name); /* ... load the exact 
specified module */
        else
-               snprintf(path, sizeof path, "%s", name);
+               snprintf(path, sizeof path, "%s/%s", MODULEDIR, name);
 
        module = dlopen(path, RTLD_NOW | RTLD_NOLOAD);
        if (module) {
-- 
1.8.2.3

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

Reply via email to