- db->db_dirbuf[i] |= 1<<n;
- (void) lseek(db->db_dirf, (long)b*DBLKSIZ, L_SET);
- (void) write(db->db_dirf, db->db_dirbuf, DBLKSIZ);
- db->db_dirbno = b;
+ if (b != db->dbm_dirbno) {
+ db->dbm_dirbno = b;
+ (void) lseek(db->dbm_dirf, (long)b*DBLKSIZ, L_SET);
+ if (read(db->dbm_dirf, db->dbm_dirbuf, DBLKSIZ) != DBLKSIZ)
+ bzero(db->dbm_dirbuf, DBLKSIZ);
+ }
+ db->dbm_dirbuf[i] |= 1<<n;
+ db->dbm_dirbno = b;
+ (void) lseek(db->dbm_dirf, (long)b*DBLKSIZ, L_SET);
+ if (write(db->dbm_dirf, db->dbm_dirbuf, DBLKSIZ) != DBLKSIZ)
+ db->dbm_flags |= _DBM_IOERR;