[Bf-codereview] bugfix for: [#26753] PhysicsConstraints ID trouble on 64bit (linux at least). (issue4517112)

dfelinto at gmail.com dfelinto at gmail.com
Sat May 28 09:10:05 CEST 2011


Reviewers: bf-codereview_blender.org,

Description:
PhysicsId are Long, not ints (see PyObject*
KX_GameObject::PyGetPhysicsId() )

There is a reference in the code to use PyCapsule instead of int. I'm
not sure about that. This patch at least stops the crashes.

Original Blender tracker report:
http://projects.blender.org/tracker/index.php?func=detail&aid=26753&group_id=9&atid=306

Please review this at http://codereview.appspot.com/4517112/

Affected files:
   source/gameengine/Ketsji/KX_PyConstraintBinding.cpp


Index: source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
===================================================================
--- source/gameengine/Ketsji/KX_PyConstraintBinding.cpp	(revision 36963)
+++ source/gameengine/Ketsji/KX_PyConstraintBinding.cpp	(working copy)
@@ -405,8 +405,13 @@
  										 PyObject* args,
  										 PyObject* kwds)
  {
-	/* FIXME - physicsid is an int being cast to a pointer, should at least  
use PyCapsule */
-	int physicsid=0,physicsid2 = 0,constrainttype=0,extrainfo=0;
+	/* FIXME - physicsid is a long being cast to a pointer, should at least  
use PyCapsule */
+#if defined(_WIN64)
+	__int64 physicsid=0,physicsid2 = 0;
+#else
+	long physicsid=0,physicsid2 = 0;
+#endif
+	int constrainttype=0, extrainfo=0;
  	int len = PyTuple_Size(args);
  	int success = 1;
  	int flag = 0;
@@ -414,27 +419,51 @@
  	float pivotX=1,pivotY=1,pivotZ=1,axisX=0,axisY=0,axisZ=1;
  	if (len == 3)
  	{
-		success =  
PyArg_ParseTuple(args,"iii",&physicsid,&physicsid2,&constrainttype);
+#if defined(_WIN64)
+		success =  
PyArg_ParseTuple(args,"LLi",&physicsid,&physicsid2,&constrainttype);
+#else
+		success =  
PyArg_ParseTuple(args,"lli",&physicsid,&physicsid2,&constrainttype);
+#endif
  	}
  	else
  	if (len ==6)
  	{
-		success =  
PyArg_ParseTuple(args,"iiifff",&physicsid,&physicsid2,&constrainttype,
+#if defined(_WIN64)
+		success =  
PyArg_ParseTuple(args,"LLifff",&physicsid,&physicsid2,&constrainttype,
  			&pivotX,&pivotY,&pivotZ);
+#else
+		success =  
PyArg_ParseTuple(args,"llifff",&physicsid,&physicsid2,&constrainttype,
+								   &pivotX,&pivotY,&pivotZ);		
+#endif	
  	}
  	else if (len == 9)
  	{
-		success =  
PyArg_ParseTuple(args,"iiiffffff",&physicsid,&physicsid2,&constrainttype,
+#if defined(_WIN64)
+		success =  
PyArg_ParseTuple(args,"LLiffffff",&physicsid,&physicsid2,&constrainttype,
  			&pivotX,&pivotY,&pivotZ,&axisX,&axisY,&axisZ);
+#else
+		success =  
PyArg_ParseTuple(args,"lliffffff",&physicsid,&physicsid2,&constrainttype,
+								   &pivotX,&pivotY,&pivotZ,&axisX,&axisY,&axisZ);
+#endif
+	
  	}
  	else if (len == 10)
  	{
-		success =  
PyArg_ParseTuple(args,"iiiffffffi",&physicsid,&physicsid2,&constrainttype,
+#if defined(_WIN64)
+		success =  
PyArg_ParseTuple(args,"LLiffffffi",&physicsid,&physicsid2,&constrainttype,
  			&pivotX,&pivotY,&pivotZ,&axisX,&axisY,&axisZ,&flag);
+#else
+		success =  
PyArg_ParseTuple(args,"lliffffffi",&physicsid,&physicsid2,&constrainttype,
+								   &pivotX,&pivotY,&pivotZ,&axisX,&axisY,&axisZ,&flag);
+#endif
  	}
  	else if (len==4)
  	{
-		success =  
PyArg_ParseTuple(args,"iiii",&physicsid,&physicsid2,&constrainttype,&extrainfo);
+#if defined(_WIN64)
+		success =  
PyArg_ParseTuple(args,"LLii",&physicsid,&physicsid2,&constrainttype,&extrainfo);
+#else
+		success =  
PyArg_ParseTuple(args,"llii",&physicsid,&physicsid2,&constrainttype,&extrainfo);
+#endif
  		pivotX=extrainfo;
  	}
  	




More information about the Bf-codereview mailing list