# 2.11BSD#431 - /usr/ingres/source/iutil/wrpipe.c

##### Functions

    wrpipe            X

       1: # include   "../ingres.h"
       2: # include   "../pipes.h"
       3:
       4: /*
       5: **  Buffered Write on Pipe
       6: **
       7: **	The message `msg' of length `n' is buffered and written onto
       8: **	the pipe with UNIX file descriptor `des'.  `Buf' is the addr
       9: **	of the buffer in which buffering is to take place.  If `n' is
      10: **	zero, `msg' is taken to be a null-terminated string of char-
      11: **	acters.  `Mode' gives the operations mode of wrpipe().
      12: **
      13: **	Buffers written with wrpipe() should be read with rdpipe().
      14: **
      15: **	Modes:
      16: **
      17: **	P_PRIME -- Prime the pipe for writing.  This involves clearing
      18: **		out the error field, setting normal status, etc.  In
      19: **		general, it should always be done when you want to
      20: **		start writing.  It need not be done after writing an
      21: **		end-of-pipe (EOP), as this operation automatically
      22: **		resets the pipe.  The "exec_id" field (read by
      23: **		rdpipe(P_EXECID)) is set to `des', and the "func_id"
      24: **		field is set to `n'.
      25: **
      26: **	P_NORM -- Normal mode.  `Msg' is buffered into `buf' and
      27: **		physically written into the pipe as necessary.
      28: **
      29: **	P_END -- Writes an EOP.  Only the first three parameters need
      30: **		be specified.
      31: **
      32: **	P_FLUSH -- Flushes the buffer into the pipe, but does not write
      33: **		an EOP.  In fact, a non-EOP is guaranteed to be
      34: **		written.
      35: **
      36: **	P_WRITE -- Same as P_FLUSH, but the mode is unchanged.  This
      37: **		mode is pretty obscure, and you probably need not use
      38: **		it.
      39: **
      40: **	P_INT -- Writes an interrupt synchronization block into the
      41: **		pipe.  This mode need only be called by resyncpipes()
      42: **		and need not normally concern the user.  It is critical
      43: **		that this mode be called by all processes so that dead-
      44: **		lock or syserrs do not occur.
      45: **
      46: **	P_PARAM -- Copies one byte parameter into structure. Can be
      47: **		read via a call to rdpipe(P_PARAM).
      48: */
      49:
      50: extern int  write();        /* standard write function */
      51: int     (*Pi_wr_fn)() = &write; /* pipe write function */
      52:
      53: wrpipe(mode, buf1, des, msg, n)
      54: int     mode;
      55: struct pipfrmt  *buf1;
      56: int     des;
      57: char        *msg;
      58: int     n;
      59: {
      60:     register int        nn;
      61:     extern char     *Proc_name;
      62:     register int        msgl;
      63:     register struct pipfrmt *buf;
      64:     int         flushflg;
      65:     int         i;
      66:
      67:     buf = buf1;
      68: #	ifdef xATR1
      69:     if (tTf(99, 8))
      70:         printf("\n%s wrpipe md %d buf %u des %d msg %l n %d\n",
      71:             Proc_name, mode, buf, des, msg, n);
      72: #	endif
      73:     nn = msgl = 0;
      74:     flushflg = 0;
      75:     switch (mode)
      76:     {
      77:       case P_PRIME:
      78:         buf->buf_len = buf->pbuf_pt = buf->err_id = buf->param_id = 0;
      79:         buf->hdrstat = NORM_STAT;
      80:         buf->exec_id = des;
      81:         buf->func_id = n;
      82:         return(0);
      83:
      84:       case P_PARAM:
      85:         buf->param_id = des;
      86:         return (0);
      87:
      88:       case P_NORM:
      89:         msgl = nn = (n == 0) ? length(msg) + 1 : n;
      90:         break;
      91:
      92:       case P_END:
      93:         buf->hdrstat = LAST_STAT;
      94:         flushflg++;
      95:         break;
      96:
      97:       case P_FLUSH:
      98:         buf->hdrstat = NORM_STAT;
      99:         flushflg++;
     100:         break;
     101:
     102:       case P_WRITE:
     103:         flushflg--;
     104:         break;
     105:
     106:       case P_INT:
     107:         buf->hdrstat = SYNC_STAT;
     108:         flushflg++;
     109:         break;
     110:
     111:       default:
     112:         syserr("wrpipe: bad mode %d", mode);
     113:     }
     114:
     115:     while (nn > 0 || flushflg)
     116:     {
     117:         /* BUFFER OUT DATA */
     118:         while (nn > 0 && buf->pbuf_pt < PBUFSIZ)
     119:             buf->pbuf[buf->pbuf_pt++] = msg[msgl - (nn--)];
     120:         /* WRITE PIPE ? */
     121:         if (buf->pbuf_pt >= PBUFSIZ || flushflg)
     122:         {
     123:             if (flushflg >= 0)
     124:                 buf->buf_len = buf->pbuf_pt;
     125: #			ifdef xATR2
     126:             if (tTf(99, 10))
     127:                 prpipe(buf);
     128: #			endif
     129:             if ((i = (*Pi_wr_fn)(des, buf, HDRSIZ+PBUFSIZ)) < HDRSIZ+PBUFSIZ)
     130:                 syserr("wrpipe: wr err %d %d", i, des);
     131:             buf->pbuf_pt = 0;
     132:             buf->err_id = 0;
     133:             flushflg = 0;
     134:         }
     135:     }
     136: #	ifdef xATR3
     137:     if (tTf(99, 9))
     138:     {
     139:         printf("%s wrpipe ret %d\n", Proc_name, msgl);
     140:     }
     141: #	endif
     142:     return (msgl);
     143: }

#### Defined functions

wrpipe defined in line 53; used 76 times

- in /usr/ingres/source/dbu/main.c line 257-258(2), 290, 339
- in /usr/ingres/source/decomp/call_dbu.c line 39-44(3), 92
- in /usr/ingres/source/decomp/call_dbu70.c line 73-78(3), 129
- in /usr/ingres/source/decomp/call_ovqp.c line 87, 103-104(2), 111-112(2), 149, 239, 247, 291, 323-324(2), 354-358(2)
- in /usr/ingres/source/decomp/main.c line 56, 97
- in /usr/ingres/source/decomp/writeback.c line 15, 25, 34
- in /usr/ingres/source/iutil/copypipes.c line 25-26(2)
- in /usr/ingres/source/iutil/error.c line 37, 44-46(2)
- in /usr/ingres/source/iutil/proc_error.c line 26
- in /usr/ingres/source/iutil/resyncpipes.c line 18, 25, 33
- in /usr/ingres/source/monitor/go.c line 50-58(3)
- in /usr/ingres/source/ovqp/copyreturn.c line 16
- in /usr/ingres/source/ovqp/equelpr.c line 74-76(2), 108, 116
- in /usr/ingres/source/ovqp/getqry.c line 55
- in /usr/ingres/source/ovqp/main.c line 40, 81
- in /usr/ingres/source/ovqp/startovqp.c line 22
- in /usr/ingres/source/ovqp/support.c line 124, 164
- in /usr/ingres/source/parser/call_p.c line 20, 26-28(2)
- in /usr/ingres/source/parser/call_tree.c line 24, 35, 74-76(2), 98
- in /usr/ingres/source/parser/control.c line 214-219(3)
- in /usr/ingres/source/parser/main.c line 112
- in /usr/ingres/source/parser/tree.c line 128
- in /usr/ingres/source/qrymod/issue.c line 73-75(2), 177
- in /usr/ingres/source/qrymod/main.c line 188, 196-199(3)
- in /usr/ingres/source/qrymod/util.c line 285-288(3)

Last modified: 1995-02-04 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 527 |