@@ -237,12 +237,14 @@ gdbm_bool(PyObject *op)
237237// This function is needed to support PY_SSIZE_T_CLEAN.
238238// Return 1 on success, same to PyArg_Parse().
239239static int
240- parse_datum (PyObject * o , datum * d , const char * failmsg )
240+ parse_datum (PyObject * o , datum * d , const char * item_name )
241241{
242242 Py_ssize_t size ;
243243 if (!PyArg_Parse (o , "s#" , & d -> dptr , & size )) {
244- if (failmsg != NULL ) {
245- PyErr_Format (PyExc_TypeError , failmsg , Py_TYPE (o )-> tp_name , o , Py_TYPE (o )-> tp_name );
244+ if (item_name ) {
245+ PyErr_Format (PyExc_TypeError ,
246+ "gdbm %s must be bytes or str, not '%T'" ,
247+ item_name , o );
246248 }
247249 return 0 ;
248250 }
@@ -318,12 +320,10 @@ static int
318320gdbm_ass_sub_lock_held (PyObject * op , PyObject * v , PyObject * w )
319321{
320322 datum krec , drec ;
321- const char * key_failmsg = "dbm key returned %.100s for value %R But database keys must be bytes or str, not %.100s" ;
322- const char * value_failmsg = "dbm value returned %.100s for value %R But database keys must be bytes or str, not %.100s" ;
323323 gdbmobject * dp = _gdbmobject_CAST (op );
324324 _gdbm_state * state = PyType_GetModuleState (Py_TYPE (dp ));
325325
326- if (!parse_datum (v , & krec , key_failmsg )) {
326+ if (!parse_datum (v , & krec , "key" )) {
327327 return -1 ;
328328 }
329329 if (dp -> di_dbm == NULL ) {
@@ -344,7 +344,7 @@ gdbm_ass_sub_lock_held(PyObject *op, PyObject *v, PyObject *w)
344344 }
345345 }
346346 else {
347- if (!parse_datum (w , & drec , value_failmsg )) {
347+ if (!parse_datum (w , & drec , "value" )) {
348348 return -1 ;
349349 }
350350 errno = 0 ;
@@ -492,8 +492,7 @@ gdbm_contains_lock_held(PyObject *self, PyObject *arg)
492492 }
493493 else if (!PyBytes_Check (arg )) {
494494 PyErr_Format (PyExc_TypeError ,
495- "gdbm key must be bytes or string, not %.100s" ,
496- Py_TYPE (arg )-> tp_name );
495+ "gdbm key must be bytes or str, not '%T'" , arg );
497496 return -1 ;
498497 }
499498 else {
0 commit comments