[ctypes-commit] ctypes/source _ctypes.c,1.221,1.222
Brought to you by:
theller
From: Thomas H. <th...@us...> - 2005-03-14 07:58:07
|
Update of /cvsroot/ctypes/ctypes/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28061 Modified Files: _ctypes.c Log Message: Don't ignore keyword arguments in Structure.__init__(). Reported by Jimmy Retzlaff. Index: _ctypes.c =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/_ctypes.c,v retrieving revision 1.221 retrieving revision 1.222 diff -C2 -d -r1.221 -r1.222 *** _ctypes.c 11 Mar 2005 19:26:59 -0000 1.221 --- _ctypes.c 14 Mar 2005 07:57:55 -0000 1.222 *************** *** 3069,3112 **** return -1; } ! if (PyTuple_GET_SIZE(args) == 0) ! return 0; /* no initializers: nothing to do */ ! fields = PyObject_GetAttrString(self, "_fields_"); ! if (!fields) { ! PyErr_Clear(); ! fields = PyTuple_New(0); ! } ! ! if (PyTuple_GET_SIZE(args) > PySequence_Length(fields)) { ! Py_DECREF(fields); ! PyErr_SetString(PyExc_ValueError, ! "too many initializers"); ! return -1; ! } ! ! for (i = 0; i < PyTuple_GET_SIZE(args); ++i) { ! PyObject *pair = PySequence_GetItem(fields, i); ! PyObject *name; ! PyObject *val; ! if (!pair) { ! Py_DECREF(fields); ! return IBUG("_fields_[i] failed"); ! } ! ! name = PySequence_GetItem(pair, 0); ! if (!name) { ! Py_DECREF(fields); ! return IBUG("_fields_[i][0] failed"); } ! val = PyTuple_GET_ITEM(args, i); ! if (-1 == PyObject_SetAttr(self, name, val)) { Py_DECREF(fields); return -1; } ! Py_DECREF(name); ! Py_DECREF(pair); } - Py_DECREF(fields); if (kwds) { --- 3069,3112 ---- return -1; } ! if (PyTuple_GET_SIZE(args)) { ! fields = PyObject_GetAttrString(self, "_fields_"); ! if (!fields) { ! PyErr_Clear(); ! fields = PyTuple_New(0); } ! if (PyTuple_GET_SIZE(args) > PySequence_Length(fields)) { Py_DECREF(fields); + PyErr_SetString(PyExc_ValueError, + "too many initializers"); return -1; } ! for (i = 0; i < PyTuple_GET_SIZE(args); ++i) { ! PyObject *pair = PySequence_GetItem(fields, i); ! PyObject *name; ! PyObject *val; ! if (!pair) { ! Py_DECREF(fields); ! return IBUG("_fields_[i] failed"); ! } ! ! name = PySequence_GetItem(pair, 0); ! if (!name) { ! Py_DECREF(fields); ! return IBUG("_fields_[i][0] failed"); ! } ! ! val = PyTuple_GET_ITEM(args, i); ! if (-1 == PyObject_SetAttr(self, name, val)) { ! Py_DECREF(fields); ! return -1; ! } ! ! Py_DECREF(name); ! Py_DECREF(pair); ! } ! Py_DECREF(fields); } if (kwds) { |