[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36970] trunk/blender/source/gameengine/ Ketsji/KX_PyConstraintBinding.cpp: bugfix for: [#26753] PhysicsConstraints ID trouble on 64bit (linux at least).

Dalai Felinto dfelinto at gmail.com
Sat May 28 10:16:34 CEST 2011


Revision: 36970
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36970
Author:   dfelinto
Date:     2011-05-28 08:16:34 +0000 (Sat, 28 May 2011)
Log Message:
-----------
bugfix for: [#26753] PhysicsConstraints ID trouble on 64bit (linux at least).
[the problem also affected OSX]

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
(update: I talked with Campbell and he repeated that PyCapsule are better, but if long is working it's fine for now).

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp

Modified: trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp	2011-05-28 07:47:58 UTC (rev 36969)
+++ trunk/blender/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp	2011-05-28 08:16:34 UTC (rev 36970)
@@ -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-blender-cvs mailing list