mirror of https://github.com/fltk/fltk
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 © 2017-2018 Red Hat Inc.
|
||||||
* Copyright © 2018 Jonas Ådahl
|
* Copyright © 2018 Jonas Ådahl
|
||||||
|
* Copyright © 2019 Christian Rauch
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
* a copy of this software and associated documentation files (the
|
* 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. */
|
/* Vfunc used for constructing a plugin instance. */
|
||||||
libdecor_plugin_constructor constructor;
|
libdecor_plugin_constructor constructor;
|
||||||
|
|
||||||
|
/* NULL terminated list of incompatible symbols. */
|
||||||
|
char *conflicting_symbols[1024];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct libdecor_plugin_interface {
|
struct libdecor_plugin_interface {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Copyright © 2017-2018 Red Hat Inc.
|
* Copyright © 2017-2018 Red Hat Inc.
|
||||||
* Copyright © 2018 Jonas Ådahl
|
* Copyright © 2018 Jonas Ådahl
|
||||||
|
* Copyright © 2019 Christian Rauch
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
* a copy of this software and associated documentation files (the
|
* 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;
|
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 *
|
static struct plugin_loader *
|
||||||
load_plugin_loader(struct libdecor *context,
|
load_plugin_loader(struct libdecor *context,
|
||||||
const char *path,
|
const char *path,
|
||||||
|
@ -1438,6 +1457,11 @@ load_plugin_loader(struct libdecor *context,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!check_symbol_conflicts(plugin_description)) {
|
||||||
|
dlclose(lib);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
priority = calculate_priority(plugin_description);
|
priority = calculate_priority(plugin_description);
|
||||||
if (priority == -1) {
|
if (priority == -1) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
|
Loading…
Reference in New Issue