Update with changes from source (commit bcb1d791) - cont'd.
This commit is contained in:
parent
a2bf4d7ef2
commit
75dd467dc5
@ -1,6 +1,7 @@
|
||||
/*
|
||||
* Copyright © 2017-2018 Red Hat Inc.
|
||||
* Copyright © 2018 Jonas Ådahl
|
||||
* Copyright © 2019 Christian Rauch
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
@ -79,6 +80,9 @@ struct libdecor_plugin_description {
|
||||
|
||||
/* Vfunc used for constructing a plugin instance. */
|
||||
libdecor_plugin_constructor constructor;
|
||||
|
||||
/* NULL terminated list of incompatible symbols. */
|
||||
char *conflicting_symbols[1024];
|
||||
};
|
||||
|
||||
struct libdecor_plugin_interface {
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*
|
||||
* Copyright © 2017-2018 Red Hat Inc.
|
||||
* Copyright © 2018 Jonas Ådahl
|
||||
* Copyright © 2019 Christian Rauch
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
@ -1387,6 +1388,24 @@ calculate_priority(const struct libdecor_plugin_description *plugin_description)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static bool
|
||||
check_symbol_conflicts(const struct libdecor_plugin_description *plugin_description)
|
||||
{
|
||||
char * const *symbol;
|
||||
|
||||
symbol = plugin_description->conflicting_symbols;
|
||||
while (*symbol) {
|
||||
dlerror();
|
||||
dlsym (RTLD_DEFAULT, *symbol);
|
||||
if (!dlerror())
|
||||
return false;
|
||||
|
||||
symbol++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static struct plugin_loader *
|
||||
load_plugin_loader(struct libdecor *context,
|
||||
const char *path,
|
||||
@ -1438,6 +1457,11 @@ load_plugin_loader(struct libdecor *context,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!check_symbol_conflicts(plugin_description)) {
|
||||
dlclose(lib);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
priority = calculate_priority(plugin_description);
|
||||
if (priority == -1) {
|
||||
fprintf(stderr,
|
||||
|
Loading…
x
Reference in New Issue
Block a user