- fragment = page_no & 0xffff;
- segment = page_no >> 16;
- mgr->reads++;
-
- while( off < page_size ) {
- if( fragment >> 16 )
- segment++, fragment = 0;
-
- if( segment < mgr->segments ) {
- perm = mgr->pages[segment] + ((uid)fragment << mgr->page_bits);
-
- memcpy ((unsigned char *)page + off, perm, mgr->page_size);
- off += mgr->page_size;
- fragment++;
- continue;
- }
-
- bt_mutexlock (mgr->maps);
-
- if( segment < mgr->segments ) {
- bt_releasemutex (mgr->maps);
- continue;
- }
-
- mgr->pages[mgr->segments] = mmap (0, (uid)65536 << mgr->page_bits, flag, MAP_SHARED, mgr->idx, (uid)mgr->segments << (mgr->page_bits + 16));
- mgr->segments++;
-
- bt_releasemutex (mgr->maps);
- }
+ if( pread(mgr->idx, page, page_size, page_no << mgr->page_bits) < page_size )
+ return mgr->err = BTERR_read;