Index: cStringIO.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cStringIO.c,v retrieving revision 2.46 diff -c -r2.46 cStringIO.c *** cStringIO.c 27 Feb 2004 10:30:49 -0000 2.46 --- cStringIO.c 1 Mar 2004 09:13:14 -0000 *************** *** 421,455 **** "writelines(sequence_of_strings): write each string"); static PyObject * O_writelines(Oobject *self, PyObject *args) { ! PyObject *tmp = 0; ! static PyObject *joiner = NULL; ! ! if (!joiner) { ! PyObject *empty_string = PyString_FromString(""); ! if (empty_string == NULL) return NULL; ! joiner = PyObject_GetAttrString(empty_string, "join"); ! Py_DECREF(empty_string); ! if (joiner == NULL) return NULL; } ! ! if (PyObject_Size(args) < 0) return NULL; ! ! args = PyTuple_Pack(1, args); ! if (args == NULL) ! return NULL; ! tmp = PyObject_Call(joiner, args, NULL); ! Py_DECREF(args); ! UNLESS (tmp) return NULL; ! ! args = PyTuple_Pack(1, tmp); ! Py_DECREF(tmp); ! UNLESS (args) return NULL; ! ! tmp = O_write(self, args); ! Py_DECREF(args); ! return tmp; } static struct PyMethodDef O_methods[] = { --- 421,448 ---- "writelines(sequence_of_strings): write each string"); static PyObject * O_writelines(Oobject *self, PyObject *args) { ! PyObject *it, *s; ! ! it = PyObject_GetIter(args); ! if (it == NULL) ! return NULL; ! while ((s = PyIter_Next(it)) != NULL) { ! int l; ! char *c; ! if (PyString_AsStringAndSize(s, &c, &l) == -1) { ! Py_DECREF(it); ! Py_DECREF(s); return NULL; ! } ! if (O_cwrite((PyObject *)self, c, l) == -1) { ! Py_DECREF(it); ! Py_DECREF(s); return NULL; + } + Py_DECREF(s); } ! Py_DECREF(it); ! Py_RETURN_NONE; } static struct PyMethodDef O_methods[] = {