/* Delete a record. */ int gdbm_delete(GDBM_FILE dbf, datum key){ assert(dbf); if(!key.dptr || key.dsize < 0){ gdbm_errno = GDBM_ILLEGAL_DATA; return -1; } if(dbf->depot){ if(!dpwritable(dbf->depot)){ gdbm_errno = GDBM_READER_CANT_DELETE; return -1; } if(!dpout(dbf->depot, key.dptr, key.dsize)){ gdbm_errno = gdbm_geterrno(dpecode); return -1; } if(dbf->syncmode && !dpsync(dbf->depot)){ gdbm_errno = gdbm_geterrno(dpecode); return -1; } } else { if(!crwritable(dbf->curia)){ gdbm_errno = GDBM_READER_CANT_DELETE; return -1; } if(!crout(dbf->curia, key.dptr, key.dsize)){ gdbm_errno = gdbm_geterrno(dpecode); return -1; } if(dbf->syncmode && !crsync(dbf->curia)){ gdbm_errno = gdbm_geterrno(dpecode); return -1; } } return 0; }
bool DBPrivDelete(DBPriv *db, const void *key, int key_size) { if (!Lock(db)) { return false; } /* dpout returns false both for error and if key is not found */ if (!dpout(db->depot, key, key_size) && dpecode != DP_ENOITEM) { Unlock(db); return false; } Unlock(db); return true; }