Annotation of libwww/Library/src/HTTee.c, revision 2.3
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: }
44: PRIVATE void HTTee_free ARGS1(HTStream *, me)
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.1 timbl 49: }
50: PRIVATE void HTTee_abort ARGS2(HTStream *, me, HTError, e)
51: {
52: (*me->s1->isa->abort)(me->s1, e);
53: (*me->s2->isa->abort)(me->s2, e);
2.2 luotonen 54: free(me);
2.1 timbl 55: }
56:
57:
58: /* Tee stream
59: ** ----------
60: */
61: PRIVATE CONST HTStreamClass HTTeeClass =
62: {
63: "Tee",
64: HTTee_free,
65: HTTee_abort,
66: HTTee_put_character, HTTee_put_string,
67: HTTee_write
68: };
69:
70:
71: /* Tee creation
72: */
73: PUBLIC HTStream * HTTee ARGS2(HTStream *, s1,HTStream *, s2)
74: {
75: HTStream * me = (HTStream*)malloc(sizeof(*me));
76: if (!me) outofmem(__FILE__, "HTTee");
77: me->isa = &HTTeeClass;
78: me->s1 = s1;
79: me->s2 = s2;
80: return me;
81: }
82:
83:
Webmaster