summaryrefslogtreecommitdiff
path: root/glx
diff options
context:
space:
mode:
authorVasily Khoruzhick <anarsoul@gmail.com>2020-03-20 20:36:25 -0700
committerAdam Jackson <ajax@nwnk.net>2020-03-23 20:50:30 +0000
commitb56e501092169a9c0a60663d832ee71898a8bc4b (patch)
tree1f3445d080a2358d26691c477009f5a386014bcf /glx
parent5e91587302e85fd6f0e8d5ffbe30182e18c6913f (diff)
glx: fixup symbol name for get_extensions function
glxProbeDriver() concatenates __DRI_DRIVER_GET_EXTENSIONS with driver name to get symbol name for get_extension function. Unfortunately that doesn't work for drivers that have hyphen in their name, e.g. sun4i-drm -- get_extensions() for these uses underscore instead. As result dlsym() doesn't find get_extension() function and AIGLX initialization fails resulting in following message in Xorg.0.log: (EE) AIGLX error: sun4i-drm does not export required DRI extension Replace all non-alpha-numeric characters with underscore to fix the issue. Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Diffstat (limited to 'glx')
-rw-r--r--glx/glxdricommon.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/glx/glxdricommon.c b/glx/glxdricommon.c
index 1baf082cf..2e00bab03 100644
--- a/glx/glxdricommon.c
+++ b/glx/glxdricommon.c
@@ -27,6 +27,7 @@
#include <dix-config.h>
#endif
+#include <ctype.h>
#include <stdint.h>
#include <errno.h>
#include <dlfcn.h>
@@ -322,6 +323,15 @@ glxProbeDriver(const char *driverName,
__DRI_DRIVER_GET_EXTENSIONS, driverName) != -1) {
const __DRIextension **(*get_extensions)(void);
+ for (i = 0; i < strlen(get_extensions_name); i++) {
+ /* Replace all non-alphanumeric characters with underscore,
+ * since they are not allowed in C symbol names. That fixes up
+ * symbol name for drivers with '-drm' suffix
+ */
+ if (!isalnum(get_extensions_name[i]))
+ get_extensions_name[i] = '_';
+ }
+
get_extensions = dlsym(driver, get_extensions_name);
if (get_extensions)
extensions = get_extensions();