home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / ctlmod / pb_put.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  1.1 KB  |  67 lines

  1. # include    "ctlmod.h"
  2. # include    "pipes.h"
  3. # include    <sccs.h>
  4.  
  5. SCCSID(@(#)pb_put.c    8.1    12/31/84)
  6.  
  7. /*
  8. **  PB_PUT -- buffered put on pipe
  9. **
  10. **    This routine puts the named data out onto the pipe
  11. **    determined by ppb->pb_proc.
  12. **
  13. **    Parameters:
  14. **        dp -- a pointer to the data to write.
  15. **        len -- the length of the data to write.
  16. **        ppb -- a pointer to the pipe block.
  17. **
  18. **    Returns:
  19. **        none
  20. **
  21. **    Side Effects:
  22. **        none
  23. **
  24. **    Trace Flags:
  25. **        18.8 - 18.15
  26. */
  27.  
  28. pb_put(dp, len, ppb)
  29. register char    *dp;
  30. register int    len;
  31. register pb_t    *ppb;
  32. {
  33.     register int    i;
  34.  
  35. # ifdef xCTR2
  36.     if (tTf(18, 9))
  37.         lprintf("pb_put: len %d\n", len);
  38. # endif
  39.  
  40.     /*
  41.     **  Top loop.
  42.     **    Loop until we have run out of things to write.
  43.     */
  44.  
  45.     while (len > 0)
  46.     {
  47.         /* compute the length to move */
  48.         i = min(ppb->pb_nleft, len);
  49. # ifdef xCM_DEBUG
  50.         if (i <= 0)
  51.             syserr("pb_put: zero");
  52. # endif
  53.  
  54.         /* move data into buffer and adjust ptrs & counts */
  55.         bmove(dp, ppb->pb_xptr, i);
  56.         dp += i;
  57.         len -= i;
  58.         ppb->pb_xptr += i;
  59.         ppb->pb_nleft -= i;
  60.         ppb->pb_nused += i;
  61.  
  62.         /* flush block if full */
  63.         if (ppb->pb_nleft <= 0)
  64.             pb_write(ppb);
  65.     }
  66. }
  67.