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

Reply via email to