[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