diff options
author | Andreas Baumann <abaumann@yahoo.com> | 2010-05-18 18:25:41 +0200 |
---|---|---|
committer | Andreas Baumann <abaumann@yahoo.com> | 2010-05-18 18:25:41 +0200 |
commit | 686ee56fc5e4b8a3573dbad3a0e997fe89ba71a7 (patch) | |
tree | 91617a193bebb5a7d2946a065d71562c9cf530ba /tests | |
parent | 9d6b4ab6fee3d65f3a11a5f19c410e5abe4ba322 (diff) | |
download | wolfbones-686ee56fc5e4b8a3573dbad3a0e997fe89ba71a7.tar.gz wolfbones-686ee56fc5e4b8a3573dbad3a0e997fe89ba71a7.tar.bz2 |
now stuck in dlsym/dereferencing type-punned pointer will break strict-aliasing rules beautiness :-)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/library/test_loader.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/tests/library/test_loader.c b/tests/library/test_loader.c index 6088c92..b9bce9d 100644 --- a/tests/library/test_loader.c +++ b/tests/library/test_loader.c @@ -19,12 +19,17 @@ #include <stdlib.h> /* for EXIT_SUCCESS, EXIT_FAILURE */ #include <stdio.h> /* for fprintf */ +#include <assert.h> /* for assert */ int main( void ) { wolf_library_p library; wolf_error_t error; char errbuf[512]; + typedef int (*multiply_by_two_func)( int ); + multiply_by_two_func func; + int res = 0; + /* open the libray */ library = wolf_library_load( "./testlib.so.0.0.0", &error ); if( error != WOLF_OK ) { fprintf( stderr, "Error %d loading the library: %s\n", @@ -32,7 +37,20 @@ int main( void ) { return EXIT_FAILURE; } - wolf_library_unload( library ); + /* fetch a known symbol (multiply_by_two) */ + *(void **)(&func) = wolf_library_get( library, "multiply_by_two", &error ); + + /* call it */ + res = func( 2 ); + assert( res == 4 ); + + /* close library */ + error = wolf_library_unload( library ); + if( error != WOLF_OK ) { + fprintf( stderr, "Error %d unloading the library: %s\n", + error, wolf_library_errmsg( error, library, errbuf, 512 ) ); + return EXIT_FAILURE; + } return EXIT_SUCCESS; } |