Annotation of libwww/Library/src/HTTee.c, revision 2.4

2.1       timbl       1: 
                      2: /*
                      3: **     T E E    C L A S S
                      4: **
                      5: **     The Tee class just writes to two streams.  Easy.
                      6: **     See also the Black Hole stream which is even easier.
2.3       duns        7: **
                      8: ** HISTORY:
                      9: **      8 Jul 94  FM   Insulate free() from _free structure element.
                     10: **
2.1       timbl      11: */
                     12: 
                     13: 
                     14: #include "HTTee.h"
                     15: 
                     16: 
                     17: /*             Stream Object
                     18: **             ------------
                     19: */
                     20: 
                     21: struct _HTStream {
                     22:        CONST HTStreamClass *   isa;
                     23:        
                     24:        HTStream *              s1;
                     25:        HTStream *              s2;
                     26: };
                     27: 
                     28: 
                     29: PRIVATE void HTTee_put_character ARGS2(HTStream *, me, char, c)
                     30: {
                     31:     (*me->s1->isa->put_character)(me->s1, c);
                     32:     (*me->s2->isa->put_character)(me->s2, c);
                     33: }
                     34: PRIVATE void HTTee_put_string ARGS2(HTStream *, me, CONST char*, s)
                     35: {
                     36:     (*me->s1->isa->put_string)(me->s1, s);
                     37:     (*me->s2->isa->put_string)(me->s2, s);
                     38: }
                     39: PRIVATE void HTTee_write ARGS3(HTStream *, me, CONST char*, s, int, l)
                     40: {
                     41:     (*me->s1->isa->put_block)(me->s1, s, l);
                     42:     (*me->s2->isa->put_block)(me->s2, s, l);
                     43: }
2.4     ! frystyk    44: PRIVATE int HTTee_free ARGS1(HTStream *, me)
2.1       timbl      45: {
2.3       duns       46:     (*me->s1->isa->_free)(me->s1);
                     47:     (*me->s2->isa->_free)(me->s2);
2.2       luotonen   48:     free(me);
2.4     ! frystyk    49:     return 0;
2.1       timbl      50: }
2.4     ! frystyk    51: PRIVATE int HTTee_abort ARGS2(HTStream *, me, HTError, e)
2.1       timbl      52: {
                     53:     (*me->s1->isa->abort)(me->s1, e);
                     54:     (*me->s2->isa->abort)(me->s2, e);
2.2       luotonen   55:     free(me);
2.4     ! frystyk    56:     return EOF;
2.1       timbl      57: }
                     58: 
                     59: 
                     60: /*     Tee stream
                     61: **     ----------
                     62: */
                     63: PRIVATE CONST HTStreamClass HTTeeClass =
                     64: {              
                     65:        "Tee",
                     66:        HTTee_free,
                     67:        HTTee_abort,
                     68:        HTTee_put_character,    HTTee_put_string,
                     69:        HTTee_write
                     70: }; 
                     71: 
                     72: 
                     73: /*     Tee creation
                     74: */
                     75: PUBLIC HTStream * HTTee ARGS2(HTStream *, s1,HTStream *, s2)
                     76: {
                     77:     HTStream * me = (HTStream*)malloc(sizeof(*me));
                     78:     if (!me) outofmem(__FILE__, "HTTee");
                     79:     me->isa = &HTTeeClass;
                     80:     me->s1 = s1;
                     81:     me->s2 = s2;
                     82:     return me;
                     83: }
                     84: 
                     85: 

Webmaster