]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
ctypes: Slightly better error message when a struct field name is not a string.
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Fri, 2 Sep 2011 21:07:54 +0000 (23:07 +0200)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Fri, 2 Sep 2011 21:07:54 +0000 (23:07 +0200)
Modules/_ctypes/stgdict.c

index 14dc16fc0297833ae03e5097578db4a70cf4aaf2..63f956bbcaa5d4d62d4c4c72b981ab01603b7236 100644 (file)
@@ -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,