Fixed problem with missing PyInt_CheckExact() macro in _ctypes.c

This commit is contained in:
Christian Heimes 2007-12-05 09:33:00 +00:00
parent 50ab942741
commit dbb7b9da61
1 changed files with 9 additions and 4 deletions

View File

@ -954,8 +954,8 @@ ArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
StgDictObject *itemdict;
PyObject *proto;
PyObject *typedict;
int length;
long length;
int overflow;
Py_ssize_t itemsize, itemalign;
typedict = PyTuple_GetItem(args, 2);
@ -963,13 +963,18 @@ ArrayType_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
proto = PyDict_GetItemString(typedict, "_length_"); /* Borrowed ref */
if (!proto || !PyInt_CheckExact(proto)) {
if (!proto || !PyLong_Check(proto)) {
PyErr_SetString(PyExc_AttributeError,
"class must define a '_length_' attribute, "
"which must be a positive integer");
return NULL;
}
length = PyLong_AS_LONG(proto);
length = PyLong_AsLongAndOverflow(proto, &overflow);
if (overflow) {
PyErr_SetString(PyExc_OverflowError,
"The '_length_' attribute is too large");
return NULL;
}
proto = PyDict_GetItemString(typedict, "_type_"); /* Borrowed ref */
if (!proto) {