|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <access.h> ! 3: # include <opsys.h> ! 4: # include <sccs.h> ! 5: ! 6: SCCSID(@(#)last_page.c 8.2 1/17/85) ! 7: ! 8: /* ! 9: ** LAST_PAGE -- computes a tid for the last page in the relation. ! 10: */ ! 11: ! 12: # ifdef xV6_UNIX ! 13: struct stat ! 14: { ! 15: char junk[9], size0; ! 16: int size1; ! 17: char junk2[25]; ! 18: }; ! 19: # endif ! 20: ! 21: last_page(d, tid, buf) ! 22: register DESC *d; ! 23: register TID *tid; ! 24: register struct accbuf *buf; ! 25: { ! 26: long lpage; ! 27: struct stat stats; ! 28: ! 29: if ((buf != 0) && (abs(d->reldum.relspec) == M_HEAP) && (buf->mainpg == 0) && (buf->ovflopg == 0)) ! 30: lpage = buf->thispage; ! 31: else ! 32: { ! 33: if (fstat(d->relfp, &stats)) ! 34: syserr("last_page: fstat err %.14s", d->reldum.relid); ! 35: # ifdef xV6_UNIX ! 36: /* number of pages in relation - 1 */ ! 37: lpage = ((stats.size1 >> 9) & 0177) + ((stats.size0 & I1MASK) << 7)- 1; ! 38: # else ! 39: lpage = stats.st_size / PGSIZE - 1; ! 40: # endif ! 41: # ifdef xATR2 ! 42: if (tTf(26, 8)) ! 43: printf("fstat-lp %.12s %ld\n", d->reldum.relid, lpage); ! 44: # endif ! 45: } ! 46: stuff_page(tid, &lpage); ! 47: tid->line_id = 0; ! 48: return (0); ! 49: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.