summaryrefslogtreecommitdiff
path: root/tests/library/test_loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/library/test_loader.c')
-rw-r--r--tests/library/test_loader.c41
1 files changed, 40 insertions, 1 deletions
diff --git a/tests/library/test_loader.c b/tests/library/test_loader.c
index 37b549b..60f2514 100644
--- a/tests/library/test_loader.c
+++ b/tests/library/test_loader.c
@@ -27,6 +27,16 @@
#define LIBRARY_NAME "./testlib.so.0.0.0"
#endif
#define LIBRARY_FUNC "multiply_by_two"
+#define LIBRARY_VAR "seven"
+#define LIBRARY_STRUCT "mod_descr"
+
+typedef int (*multiply_by_two_func)( int );
+
+typedef struct {
+ int major;
+ int minor;
+ multiply_by_two_func func;
+} module_descriptor_t;
int main( void ) {
wolf_library_p library;
@@ -36,6 +46,8 @@ int main( void ) {
WOLF_LIBRARY_FUNCPTR symbol;
multiply_by_two_func func;
int res = 0;
+ int *var;
+ module_descriptor_t *mod_descr;
/* open the libray */
library = wolf_library_load( LIBRARY_NAME, &error );
@@ -49,7 +61,7 @@ int main( void ) {
}
/* fetch a known function symbol (multiply_by_two) */
- symbol = wolf_library_get_func( library, LIBRARY_FUNC, &error );
+ symbol = wolf_library_get( library, LIBRARY_FUNC, &error );
if( error != WOLF_OK ) {
fprintf( stderr, "Error %d (%s) fetching function '%s' from the library\n",
error, wolf_error_msg( error, errbuf, 512 ), LIBRARY_FUNC );
@@ -62,8 +74,35 @@ int main( void ) {
/* call it */
res = func( 7 );
+ printf( "func(7) = %d\n", res );
assert( res == 14 );
+ /* fetch address as address to a variable (seven) */
+ var = (int *)wolf_library_get( library, LIBRARY_VAR, &error );
+ if( error != WOLF_OK ) {
+ fprintf( stderr, "Error %d (%s) fetching variable '%s' from the library\n",
+ error, wolf_error_msg( error, errbuf, 512 ), LIBRARY_VAR );
+ fprintf( stderr, "Internal loader error: %s\n",
+ wolf_library_error_msg( library, errbuf, 512 ) );
+ (void)wolf_library_unload( library );
+ return EXIT_FAILURE;
+ }
+ printf( "var = %d\n", *var );
+ assert( *var == 7 );
+
+ /* fetch something complex (in this case something like a module descriptor) */
+ mod_descr = (module_descriptor_t *)wolf_library_get( library, LIBRARY_STRUCT, &error );
+ if( error != WOLF_OK ) {
+ fprintf( stderr, "Error %d (%s) fetching structure '%s' from the library\n",
+ error, wolf_error_msg( error, errbuf, 512 ), LIBRARY_STRUCT );
+ fprintf( stderr, "Internal loader error: %s\n",
+ wolf_library_error_msg( library, errbuf, 512 ) );
+ (void)wolf_library_unload( library );
+ return EXIT_FAILURE;
+ }
+ printf( "module version: %d.%d\n", mod_descr->major, mod_descr->minor );
+ assert( mod_descr->major == 1 && mod_descr->minor == 0 );
+
/* close library */
error = wolf_library_unload( library );
if( error != WOLF_OK ) {