tags 324025 -patch
thanks

The patch in this bug is horribly wrong.

diff -urN ../tmp-orig/aqsis-1.1.0.20050815/libshadervm/shadervm.cpp
./libshadervm/shadervm.cpp
--- ../tmp-orig/aqsis-1.1.0.20050815/libshadervm/shadervm.cpp   2005-08-15 
09:04:44.000000000 +0000
+++ ./libshadervm/shadervm.cpp  2005-08-21 12:44:02.000000000 +0000
@@ -1092,7 +1092,7 @@
                             // We have an initialiser we have not run yet
                             if((*candidate)->init){
                                 (*candidate)->initData =
-                                    
((*candidate)->init)((int)((void*)this),NULL);
+                                    
((*candidate)->init)((long)((void*)this),NULL);
                             };
                             (*candidate)->initialised = true;
                         };

The prototype of ((*candidate)->init) is

  typedef void* (*DSOInit)(int,void *);

Casting "this" to a long instead of an int does *not* fix this bug on 64-bit
systems, it just papers over it so that the compiler can't see it -- the
value of "this" will still be truncated to an int when passed to the
function!

Further investigation is needed here to determine a correct fix.  The
obvious one would be to promote the first arg of DSOInit to 'long', but this
isn't necessarily correct either.

-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
[EMAIL PROTECTED]                                   http://www.debian.org/

Attachment: signature.asc
Description: Digital signature

Reply via email to