diff options
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_randommodule.c | 15 | ||||
-rw-r--r-- | Modules/xxmodule.c | 13 |
2 files changed, 16 insertions, 12 deletions
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 3256bf1..c791909 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -319,7 +319,7 @@ random_getstate(RandomObject *self) if (state == NULL) return NULL; for (i=0; i<N ; i++) { - element = PyLong_FromLong((long)(self->state[i])); + element = PyLong_FromUnsignedLong(self->state[i]); if (element == NULL) goto Fail; PyTuple_SET_ITEM(state, i, element); @@ -339,7 +339,8 @@ static PyObject * random_setstate(RandomObject *self, PyObject *state) { int i; - long element; + unsigned long element; + long index; if (!PyTuple_Check(state)) { PyErr_SetString(PyExc_TypeError, @@ -353,16 +354,16 @@ random_setstate(RandomObject *self, PyObject *state) } for (i=0; i<N ; i++) { - element = PyLong_AsLong(PyTuple_GET_ITEM(state, i)); + element = PyLong_AsUnsignedLong(PyTuple_GET_ITEM(state, i)); if (element == -1 && PyErr_Occurred()) return NULL; - self->state[i] = (unsigned long)element; + self->state[i] = element & 0xffffffffUL; /* Make sure we get sane state */ } - element = PyLong_AsLong(PyTuple_GET_ITEM(state, i)); - if (element == -1 && PyErr_Occurred()) + index = PyLong_AsLong(PyTuple_GET_ITEM(state, i)); + if (index == -1 && PyErr_Occurred()) return NULL; - self->index = (int)element; + self->index = (int)index; Py_INCREF(Py_None); return Py_None; diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c index 7c262c7..6b998b1 100644 --- a/Modules/xxmodule.c +++ b/Modules/xxmodule.c @@ -246,7 +246,7 @@ static PyTypeObject Str_Type = { 0, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ - 0, /*tp_base*/ + 0, /* see initxx */ /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ @@ -301,14 +301,14 @@ static PyTypeObject Null_Type = { 0, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ - 0, /*tp_base*/ + 0, /* see initxx */ /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ - PyType_GenericNew, /*tp_new*/ + 0, /* see initxx */ /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ }; @@ -341,12 +341,15 @@ initxx(void) { PyObject *m; + /* Due to cross platform compiler issues the slots must be filled + * here. It's required for portability to Windows without requiring + * C++. */ Null_Type.tp_base = &PyBaseObject_Type; + Null_Type.tp_new = PyType_GenericNew; Str_Type.tp_base = &PyUnicode_Type; /* Finalize the type object including setting type of the new type - * object; doing it here is required for portability to Windows - * without requiring C++. */ + * object; doing it here is required for portability, too. /* if (PyType_Ready(&Xxo_Type) < 0) return; |