@@ -237,13 +237,13 @@ 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 * items_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 , o );
246- }
244+ PyErr_Format ( PyExc_TypeError ,
245+ "database %s must be bytes or str, not %T" ,
246+ items_name , o );
247247 return 0 ;
248248 }
249249 if (INT_MAX < size ) {
@@ -262,7 +262,7 @@ gdbm_subscript_lock_held(PyObject *op, PyObject *key)
262262 gdbmobject * dp = _gdbmobject_CAST (op );
263263 _gdbm_state * state = PyType_GetModuleState (Py_TYPE (dp ));
264264
265- if (!parse_datum (key , & krec , NULL )) {
265+ if (!parse_datum (key , & krec , "keys" )) {
266266 return NULL ;
267267 }
268268 if (dp -> di_dbm == NULL ) {
@@ -318,12 +318,10 @@ static int
318318gdbm_ass_sub_lock_held (PyObject * op , PyObject * v , PyObject * w )
319319{
320320 datum krec , drec ;
321- const char * key_failmsg = "database keys must be bytes or str, not %T" ;
322- const char * value_failmsg = "database values must be bytes or str, not %T" ;
323321 gdbmobject * dp = _gdbmobject_CAST (op );
324322 _gdbm_state * state = PyType_GetModuleState (Py_TYPE (dp ));
325323
326- if (!parse_datum (v , & krec , key_failmsg )) {
324+ if (!parse_datum (v , & krec , "keys" )) {
327325 return -1 ;
328326 }
329327 if (dp -> di_dbm == NULL ) {
@@ -344,7 +342,7 @@ gdbm_ass_sub_lock_held(PyObject *op, PyObject *v, PyObject *w)
344342 }
345343 }
346344 else {
347- if (!parse_datum (w , & drec , value_failmsg )) {
345+ if (!parse_datum (w , & drec , "values" )) {
348346 return -1 ;
349347 }
350348 errno = 0 ;
0 commit comments