@@ -414,6 +414,38 @@ _dbm_dbm_setdefault_impl(dbmobject *self, PyTypeObject *cls, const char *key,
414414 return default_value ;
415415}
416416
417+ /*[clinic input]
418+ _dbm.dbm.clear
419+ cls: defining_class
420+ /
421+ Remove all items from the database.
422+
423+ [clinic start generated code]*/
424+
425+ static PyObject *
426+ _dbm_dbm_clear_impl (dbmobject * self , PyTypeObject * cls )
427+ /*[clinic end generated code: output=8d126b9e1d01a434 input=43aa6ca1acb7f5f5]*/
428+ {
429+ _dbm_state * state = PyType_GetModuleState (cls );
430+ assert (state != NULL );
431+ check_dbmobject_open (self , state -> dbm_error );
432+ datum key ;
433+ // Invalidate cache
434+ self -> di_size = -1 ;
435+ while (1 ) {
436+ key = dbm_firstkey (self -> di_dbm );
437+ if (key .dptr == NULL ) {
438+ break ;
439+ }
440+ if (dbm_delete (self -> di_dbm , key ) < 0 ) {
441+ dbm_clearerr (self -> di_dbm );
442+ PyErr_SetString (state -> dbm_error , "cannot delete item from database" );
443+ return NULL ;
444+ }
445+ }
446+ Py_RETURN_NONE ;
447+ }
448+
417449static PyObject *
418450dbm__enter__ (PyObject * self , PyObject * args )
419451{
@@ -431,6 +463,7 @@ static PyMethodDef dbm_methods[] = {
431463 _DBM_DBM_KEYS_METHODDEF
432464 _DBM_DBM_GET_METHODDEF
433465 _DBM_DBM_SETDEFAULT_METHODDEF
466+ _DBM_DBM_CLEAR_METHODDEF
434467 {"__enter__" , dbm__enter__ , METH_NOARGS , NULL },
435468 {"__exit__" , dbm__exit__ , METH_VARARGS , NULL },
436469 {NULL , NULL } /* sentinel */
0 commit comments