diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2013-12-09 19:11:59 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2013-12-09 19:11:59 +0100 |
commit | 2947b39e0c32c21e3f270efc449f4955ec85af8a (patch) | |
tree | 81c1c24e34d6ab104dc8f895013db3a2a6529e5b | |
parent | e69f51d01375149d96e7634561d30267761a37a5 (diff) | |
download | socket_wrapper-2947b39e0c32c21e3f270efc449f4955ec85af8a.tar.gz socket_wrapper-2947b39e0c32c21e3f270efc449f4955ec85af8a.tar.xz socket_wrapper-2947b39e0c32c21e3f270efc449f4955ec85af8a.zip |
swrap: Add a swrap_load_lib_function macro.
-rw-r--r-- | src/socket_wrapper.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index 9c814db..faebe56 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -406,6 +406,32 @@ static void *swrap_load_lib_handle(enum swrap_lib lib) return handle; } + +static void *_swrap_load_lib_function(enum swrap_lib lib, const char *fn_name) +{ + void *handle; + void *func; + + handle = swrap_load_lib_handle(lib); + + func = dlsym(handle, fn_name); + if (func == NULL) { + SWRAP_LOG(SWRAP_LOG_ERROR, + "Failed to find %s: %s\n", + fn_name, dlerror()); + exit(-1); + } + + return func; +} + +#define swrap_load_lib_function(lib, fn_name) \ + if (swrap.fns.libc_##fn_name == NULL) { \ + *(void **) (&swrap.fns.libc_##fn_name) = \ + _swrap_load_lib_function(lib, #fn_name); \ + } + + static void *swrap_libc_fn(void *handle, const char *fn_name) { void *func; |