diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2011-09-02 21:07:54 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2011-09-02 21:07:54 (GMT) |
commit | 842d921a79273cd04113d154b127622ff243f9c0 (patch) | |
tree | f58e2a9015034632ee387044baeda9128c5df25d /Modules | |
parent | 154f2b4726ef92e73dbf5d7d8f01df72c2a73101 (diff) | |
download | cpython-842d921a79273cd04113d154b127622ff243f9c0.zip cpython-842d921a79273cd04113d154b127622ff243f9c0.tar.gz cpython-842d921a79273cd04113d154b127622ff243f9c0.tar.bz2 |
ctypes: Slightly better error message when a struct field name is not a string.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_ctypes/stgdict.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c index 14dc16f..63f956b 100644 --- a/Modules/_ctypes/stgdict.c +++ b/Modules/_ctypes/stgdict.c @@ -426,9 +426,9 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct StgDictObject *dict; int bitsize = 0; - if (!pair || !PyArg_ParseTuple(pair, "OO|i", &name, &desc, &bitsize)) { - PyErr_SetString(PyExc_AttributeError, - "'_fields_' must be a sequence of pairs"); + if (!pair || !PyArg_ParseTuple(pair, "UO|i", &name, &desc, &bitsize)) { + PyErr_SetString(PyExc_TypeError, + "'_fields_' must be a sequence of (name, C type) pairs"); Py_XDECREF(pair); return -1; } @@ -478,6 +478,7 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct } } else bitsize = 0; + if (isStruct && !isPacked) { char *fieldfmt = dict->format ? dict->format : "B"; char *fieldname = _PyUnicode_AsString(name); @@ -487,10 +488,6 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct if (fieldname == NULL) { - PyErr_Format(PyExc_TypeError, - "structure field name must be string not %s", - name->ob_type->tp_name); - Py_DECREF(pair); return -1; } @@ -509,6 +506,7 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct return -1; } } + if (isStruct) { prop = PyCField_FromDesc(desc, i, &field_size, bitsize, &bitofs, |