Revision: 42095
http://brlcad.svn.sourceforge.net/brlcad/?rev=42095&view=rev
Author: brlcad
Date: 2011-01-11 22:32:24 +0000 (Tue, 11 Jan 2011)
Log Message:
-----------
ouch, tricky one. ISO C doesn't actually permit dlsym() to work the way it
works with the need to convert a void* to a function pointer so the compiler
has to be cajouled. we trick it with a cast through an intptr_t, which is a
type big enough to hold a pointer address, albeit not necessarily a function
pointer. the rest of the changes are just consistency with the callback
mechanism type returning an int and constness.
Modified Paths:
--------------
brlcad/trunk/src/adrt/librender/camera.c
Modified: brlcad/trunk/src/adrt/librender/camera.c
===================================================================
--- brlcad/trunk/src/adrt/librender/camera.c 2011-01-11 22:11:49 UTC (rev
42094)
+++ brlcad/trunk/src/adrt/librender/camera.c 2011-01-11 22:32:24 UTC (rev
42095)
@@ -45,7 +45,7 @@
struct render_shader_s {
const char *name;
- void (*init)(render_t *, const char *);
+ int (*init)(render_t *, const char *);
void *dlh; /* dynamic library handle */
struct render_shader_s *next;
};
@@ -57,7 +57,7 @@
static void render_camera_prep_persp(render_camera_t *camera);
static void render_camera_prep_persp_dof(render_camera_t *camera);
-static struct render_shader_s *render_shader_register (const char *name, void
(*init)(render_t *, const char *));
+static struct render_shader_s *render_shader_register (const char *name, int
(*init)(render_t *, const char *));
void
render_camera_init(render_camera_t *camera, int threads)
@@ -97,7 +97,7 @@
void
-render_camera_free(render_camera_t *camera)
+render_camera_free(render_camera_t *UNUSED(camera))
{
}
@@ -408,7 +408,7 @@
void
-render_camera_render_thread(int cpu, genptr_t ptr)
+render_camera_render_thread(int UNUSED(cpu), genptr_t ptr)
{
render_camera_thread_data_t *td;
int d, n, res_ind, scanline, v_scanline;
@@ -595,7 +595,7 @@
}
struct render_shader_s *
-render_shader_register(const char *name, void (*init)(render_t *, const char
*))
+render_shader_register(const char *name, int (*init)(render_t *, const char *))
{
struct render_shader_s *shader = (struct render_shader_s
*)bu_malloc(sizeof(struct render_shader_s), "shader");
if(shader == NULL)
@@ -613,7 +613,7 @@
render_shader_load_plugin(const char *filename) {
#ifdef HAVE_DLFCN_H
void *lh; /* library handle */
- void (*init)(render_t *, char *);
+ int (*init)(render_t *, const char *);
char *name;
struct render_shader_s *s;
@@ -622,7 +622,8 @@
if(lh == NULL) { bu_log("Faulty plugin %s: %s\n", filename, dlerror());
return NULL; }
name = dlsym(lh, "name");
if(name == NULL) { bu_log("Faulty plugin %s: No name\n", filename); return
NULL; }
- init = dlsym(lh, "init");
+ /* assumes function pointers can be stored as a number, which ISO C does
not guarantee */
+ init = (int (*) (render_t *, const char *))(intptr_t)dlsym(lh, "init");
if(init == NULL) { bu_log("Faulty plugin %s: No init\n", filename); return
NULL; }
s = render_shader_register(name, init);
s->dlh = lh;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits