Commit 49a14c16 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Avoid calling dlsym at every code

First I ever need to use the auto keyword...
parent 990437d4
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
void vlc_enable_override (void); void vlc_enable_override (void);
#if defined (__GNUC__) /* typeof and statement-expression */ \ #if defined (__GNUC__) \
&& (defined (__ELF__) && !defined (__sun__)) && (defined (__ELF__) && !defined (__sun__))
/* Solaris crashes on printf("%s", NULL); which is legal, but annoying. */ /* Solaris crashes on printf("%s", NULL); which is legal, but annoying. */
...@@ -97,8 +97,23 @@ static void *getsym (const char *name) ...@@ -97,8 +97,23 @@ static void *getsym (const char *name)
} }
#define LOG(level, ...) logbug(level, __func__, __VA_ARGS__) #define LOG(level, ...) logbug(level, __func__, __VA_ARGS__)
/* Evil non-standard GNU C macro ;)
* typeof keyword,
* statement-expression,
* nested function...
*/
#define CALL(func, ...) \ #define CALL(func, ...) \
({ typeof (func) *sym = getsym ( # func); sym (__VA_ARGS__); }) ({ \
static typeof (func) *sym = NULL; \
static pthread_once_t once = PTHREAD_ONCE_INIT; \
auto void getsym_once (void); \
void getsym_once (void) \
{ \
sym = getsym ( # func); \
} \
pthread_once (&once, getsym_once); \
sym (__VA_ARGS__); \
})
/*** Environment *** /*** Environment ***
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment