1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
diff --git a/src/glinject/CMakeLists.txt b/src/glinject/CMakeLists.txt
index 157ee9c..79690ef 100644
--- a/src/glinject/CMakeLists.txt
+++ b/src/glinject/CMakeLists.txt
@@ -1,7 +1,7 @@
include(GNUInstallDirs)
add_library(glinject SHARED glinject.c glx_events.c x_events.c)
add_dependencies(glinject elfhacks)
-target_link_libraries(glinject dl rt luajit elfhacks m)
+target_link_libraries(glinject dl rt luajit elfhacks m X11)
set_target_properties(glinject PROPERTIES LIBRARY_OUTPUT_NAME glxosd-glinject)
set_target_properties(glinject PROPERTIES VERSION ${GLXOSD_VERSION_STRING}
SOVERSION ${GLXOSD_VERSION_MAJOR})
diff --git a/src/glinject/glinject.c b/src/glinject/glinject.c
index 6917439..2c8200a 100644
--- a/src/glinject/glinject.c
+++ b/src/glinject/glinject.c
@@ -23,6 +23,13 @@
#include <stdbool.h>
#include <pthread.h>
+GLINJECT_DEFINE_REAL_SYMBOL(dlopen, void*, (const char *, int));
+
+GLINJECT_DEFINE_REAL_SYMBOL(dlsym, void*, (const void *, const char *));
+
+GLINJECT_DEFINE_REAL_SYMBOL(dlvsym, void*,
+ (const void *, const char *, const char *));
+
// Mutex used for synchronising Lua API calls.
pthread_mutex_t glinject_mutex = PTHREAD_MUTEX_INITIALIZER;
diff --git a/src/glinject/glinject.h b/src/glinject/glinject.h
index 7f35f95..7603764 100644
--- a/src/glinject/glinject.h
+++ b/src/glinject/glinject.h
@@ -21,6 +21,10 @@
typedef ret (*glinject_##name##_type) param;\
glinject_##name##_type glinject_real_##name;
+#define GLINJECT_DEFINE_REAL_SYMBOL_EXT(name, ret, param)\
+ typedef ret (*glinject_##name##_type) param;\
+ extern glinject_##name##_type glinject_real_##name;
+
#define GLINJECT_DEFINE_AND_OVERLOAD(name, ret, param)\
GLINJECT_DEFINE_REAL_SYMBOL(name, ret, param);\
ret name param
@@ -41,11 +45,11 @@ typedef __GLXextFuncPtr (*gl_function_provider_type)(const GLubyte* name);
/*
* Real symbol definitions
*/
-GLINJECT_DEFINE_REAL_SYMBOL(dlopen, void*, (const char *, int));
+GLINJECT_DEFINE_REAL_SYMBOL_EXT(dlopen, void*, (const char *, int));
-GLINJECT_DEFINE_REAL_SYMBOL(dlsym, void*, (const void *, const char *));
+GLINJECT_DEFINE_REAL_SYMBOL_EXT(dlsym, void*, (const void *, const char *));
-GLINJECT_DEFINE_REAL_SYMBOL(dlvsym, void*,
+GLINJECT_DEFINE_REAL_SYMBOL_EXT(dlvsym, void*,
(const void *, const char *, const char *));
/*
diff --git a/src/glinject/glx_events.c b/src/glinject/glx_events.c
index 4012d4b..8bc3857 100644
--- a/src/glinject/glx_events.c
+++ b/src/glinject/glx_events.c
@@ -21,6 +21,10 @@ void glXDestroy##name (Display *dpy, type drawable) { \
glinject_real_glXDestroy##name(dpy, drawable); \
}
+
+GLINJECT_DEFINE_REAL_SYMBOL(glXGetProcAddressARB, __GLXextFuncPtr, (const GLubyte*));
+GLINJECT_DEFINE_REAL_SYMBOL(glXGetProcAddress, __GLXextFuncPtr, (const GLubyte*));
+
DEFINE_GLX_DESTRUCTION_HANDLER(GLXPixmap, GLXPixmap)
DEFINE_GLX_DESTRUCTION_HANDLER(Pixmap, GLXPixmap)
DEFINE_GLX_DESTRUCTION_HANDLER(Pbuffer, GLXPbuffer)
diff --git a/src/glinject/glx_events.h b/src/glinject/glx_events.h
index 377cf8c..e5688c9 100644
--- a/src/glinject/glx_events.h
+++ b/src/glinject/glx_events.h
@@ -12,9 +12,9 @@
#include "glinject.h"
typedef __GLXextFuncPtr (*gl_function_provider_type)(const GLubyte* name);
-GLINJECT_DEFINE_REAL_SYMBOL(glXGetProcAddressARB, __GLXextFuncPtr, (const GLubyte*));
+GLINJECT_DEFINE_REAL_SYMBOL_EXT(glXGetProcAddressARB, __GLXextFuncPtr, (const GLubyte*));
-GLINJECT_DEFINE_REAL_SYMBOL(glXGetProcAddress, __GLXextFuncPtr, (const GLubyte*));
+GLINJECT_DEFINE_REAL_SYMBOL_EXT(glXGetProcAddress, __GLXextFuncPtr, (const GLubyte*));
void glinject_load_glx_event_real_symbols(const char* path);
|