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).
This commit is contained in:
Dalai Felinto 2011-05-28 08:16:34 +00:00
parent ecf2d1ff4e
commit 245d36b706

@ -405,8 +405,13 @@ static PyObject* gPyCreateConstraint(PyObject* self,
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 @@ static PyObject* gPyCreateConstraint(PyObject* self,
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;
}