41 lines
1.0 KiB
Diff
41 lines
1.0 KiB
Diff
|
diff --git a/src/libdecor.c b/src/libdecor.c
|
||
|
index a9c1106..1aa38b3 100644
|
||
|
--- a/src/libdecor.c
|
||
|
+++ b/src/libdecor.c
|
||
|
@@ -1391,22 +1391,32 @@ calculate_priority(const struct libdecor_plugin_description *plugin_description)
|
||
|
static bool
|
||
|
check_symbol_conflicts(const struct libdecor_plugin_description *plugin_description)
|
||
|
{
|
||
|
+ bool ret = true;
|
||
|
char * const *symbol;
|
||
|
+ void* main_prog = dlopen(NULL, RTLD_LAZY);
|
||
|
+ if (!main_prog) {
|
||
|
+ fprintf(stderr, "Plugin \"%s\" couldn't check conflicting symbols: \"%s\".\n",
|
||
|
+ plugin_description->description, dlerror());
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+
|
||
|
|
||
|
symbol = plugin_description->conflicting_symbols;
|
||
|
while (*symbol) {
|
||
|
dlerror();
|
||
|
- dlsym (RTLD_DEFAULT, *symbol);
|
||
|
+ dlsym (main_prog, *symbol);
|
||
|
if (!dlerror()) {
|
||
|
fprintf(stderr, "Plugin \"%s\" uses conflicting symbol \"%s\".\n",
|
||
|
plugin_description->description, *symbol);
|
||
|
- return false;
|
||
|
+ ret = false;
|
||
|
+ break;
|
||
|
}
|
||
|
|
||
|
symbol++;
|
||
|
}
|
||
|
|
||
|
- return true;
|
||
|
+ dlclose(main_prog);
|
||
|
+ return ret;
|
||
|
}
|
||
|
|
||
|
static struct plugin_loader *
|