This gets us through some of the ISO C compliance for our POSIX C
authorRick L Bird <nveid@yahoo.com>
Sun, 17 Apr 2011 18:28:09 +0000 (14:28 -0400)
committerRick L Bird <nveid@yahoo.com>
Sun, 17 Apr 2011 18:28:09 +0000 (14:28 -0400)
compliance use with the module code.
This refs issues #238 and #3

hdrs/modules.h
src/modules.c

index 86687f46ff489c14599bb1016f3592211fa52b0f..dec14507802907f747ab069cd487e3b2b52ab244 100644 (file)
@@ -19,6 +19,7 @@ int module_open(char *path, char *name);
 int module_close(struct module_entry_t *m);
 int modules_shutdown(void);
 
+extern void *utility_memcpy_ptr; /* This gets us through the ISO C warnings about our POSIX compliance macros */
 
 /* Iterate through Module List */
 #define MODULE_ITER(m) for(m = module_list ; m != NULL ; m = m->next)
@@ -28,15 +29,19 @@ int modules_shutdown(void);
 /* Retrieve Module Function */
 /* This Macro can only be used for non-returning calls */
 #define MODULE_FUNC(h, m, func, ...) \
-  if((h = (void (*)()) lt_dlsym(m, func))) { \
+  utility_memcpy_ptr = lt_dlsym(m, func); \
+  memcpy(&h, &utility_memcpy_ptr, sizeof(utility_memcpy_ptr)); \
+  if(h) { \
     h(__VA_ARGS__); \
   }
+
 #define MODULE_FUNC_NOARGS(h, m, func) \
-  if((h = (void (*)()) lt_dlsym(m, func))) { \
+  utility_memcpy_ptr = lt_dlsym(m, func); \
+  memcpy(&h, &utility_memcpy_ptr, sizeof(utility_memcpy_ptr)); \
+  if(h) { \
     h(); \
   }
 
 #define MODULE_FUNCRET(m, func) lt_dlsym(m, func);
 
-
 #endif /* _MODULES_H_ */
index 070ace51729b62b37a657f561e161a1eed854b52..688dea4483d54873559b28e5e27bf4d526bd19e6 100644 (file)
@@ -20,6 +20,9 @@
 
 struct module_entry_t *module_list = NULL;
 
+/* Utility power for my macros... This gets us through the ISO C warnings about our posix compliance issues.. */
+void *utility_memcpy_ptr;
+
 /* Ads a module entry and returns */
 struct module_entry_t *module_entry_add(char *name) {
   struct module_entry_t *entry;