- f = 1;
- for (i=0;; i+=2) {
- item = makdatum(db->dbm_pagbuf, i);
- if (item.dptr == NULL)
- break;
- if (cmpdatum(key, item) <= 0)
- continue;
- if (f || cmpdatum(bitem, item) < 0) {
- bitem = item;
- f = 0;
+ statb.st_size /= PBLKSIZ;
+ for (;;) {
+ if (db->dbm_blkptr != db->dbm_pagbno) {
+ db->dbm_pagbno = db->dbm_blkptr;
+ (void) lseek(db->dbm_pagf, db->dbm_blkptr*PBLKSIZ, L_SET);
+ if (read(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != PBLKSIZ)
+ bzero(db->dbm_pagbuf, PBLKSIZ);
+#ifdef DEBUG
+ else if (chkblk(db->dbm_pagbuf) < 0)
+ db->dbm_flags |= _DBM_IOERR;
+#endif
+ }
+ if (((short *)db->dbm_pagbuf)[0] != 0) {
+ item = makdatum(db->dbm_pagbuf, db->dbm_keyptr);
+ if (item.dptr != NULL) {
+ db->dbm_keyptr += 2;
+ return (item);
+ }
+ db->dbm_keyptr = 0;