home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / iutil / formatpg.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-18  |  1.1 KB  |  58 lines

  1. # include    <ingres.h>
  2. # include    <access.h>
  3. # include    <sccs.h>
  4.  
  5. SCCSID(@(#)formatpg.c    8.2    2/8/85)
  6.  
  7. /*
  8. **    FORMATPG - write n pages to a buffer
  9. **
  10. **
  11. **    Parameters:
  12. **        d - descriptor
  13. **        n - number of pages
  14. **
  15. **
  16. **    Return Codes:
  17. **        0 - successful
  18. **        -2 - failure when setting file ptr
  19. **        -3, -4 - failure when writing page to buffer
  20. **            -4 is for last page
  21. **
  22. **    Called by:
  23. **        create()
  24. **        modify()
  25. **        resetrel()
  26. **
  27. */
  28. formatpg(d, n)
  29. DESC    *d;
  30. long    n;
  31. {
  32.     struct accbuf    buf;
  33.     register char    *p;
  34.     extern long    lseek();
  35.  
  36.     if (Acc_head == 0)
  37.         acc_init();
  38.     if (lseek(d->relfp, 0l, 0) == -1)
  39.         return (-2);
  40.     buf.rel_tupid = d->reltid.ltid;
  41.     buf.filedesc = d->relfp;
  42.     for (p = (char *) &buf; p <= (char *) buf.linetab; p++)
  43.         *p = (char *)NULL;
  44.     buf.nxtlino = 0;
  45.     buf.linetab[0] = (int) buf.firstup - (int) &buf;
  46.     buf.ovflopg = 0;
  47.     for (buf.mainpg = 1; buf.mainpg < n; (buf.mainpg)++)
  48.     {
  49.         if (write(buf.filedesc, (char *) &buf, PGSIZE) != PGSIZE)
  50.             return (-3);
  51.     }
  52.     buf.mainpg = 0;
  53.     if (write(buf.filedesc, (char *) &buf, PGSIZE) != PGSIZE)
  54.         return (-4);
  55.     Accuwrite += n;
  56.     return (0);
  57. }
  58.