From eca7b5dbd6929a75075372cc4be2c6b376d9cb17 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Thu, 20 May 2010 17:30:26 +0200 Subject: final solution of library loader --- include/wolf/library/loader.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'include') diff --git a/include/wolf/library/loader.h b/include/wolf/library/loader.h index 11d5741..19979af 100644 --- a/include/wolf/library/loader.h +++ b/include/wolf/library/loader.h @@ -54,6 +54,22 @@ typedef struct wolf_library_t *wolf_library_p; #define WOLF_LIBRARY_FUNCPTR void * #endif +/* @brief casts a library symbol to a function pointer of a given type. + * + * Reason: conversion from void * to function pointer is illegal by ISO-99 + * (though it works actually on Posix) + */ +#if defined _WIN32 +#define WOLF_LIBRARY_FUNC_CAST( symbol__, func_t__, func__ ) func__ = (func_t__)symbol__ +#else +#define WOLF_LIBRARY_FUNC_CAST( symbol__, func_t__, func__ ) \ + { \ + union { func_t__ f__; void *s__; } alias__; \ + alias__.s__ = symbol__; \ + func__ = alias__.f__; \ + } +#endif + /** * Loads a shared library. * -- cgit v1.2.3-54-g00ecf