File: sioDebug.c

package info (click to toggle)
ted 2.11-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 11,064 kB
  • ctags: 13,935
  • sloc: ansic: 120,446; makefile: 7,469; sh: 253
file content (125 lines) | stat: -rw-r--r-- 2,961 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/************************************************************************/
/*									*/
/*  Simple io streams: Duplicate the stream to another one: Usually	*/
/*  for debugging putposes.						*/
/*									*/
/************************************************************************/

#   include	"appUtilConfig.h"

#   include	<stdlib.h>

#   include	"sioDebug.h"
#   include	<appDebugon.h>


/************************************************************************/
/*									*/
/*  Exchange of hexed binary little endian data.			*/
/*									*/
/************************************************************************/

static int sioDebugClose( void *	voids )
    {
    if  ( voids )
	{ free( voids );	}

    return 0;
    }

typedef struct DebugedInputStream
    {
    SimpleInputStream *		disSisIn;
    int				disExhausted;
    } DebugedInputStream;

static int sioInDebugReadBytes(	void *		voiddis,
				unsigned char *	buffer,
				int		count )
    {
    DebugedInputStream *	dis= (DebugedInputStream *)voiddis;
    int				done= 0;

    if  ( dis->disExhausted )
	{ LDEB(dis->disExhausted); return -1;	}

    while( done < count )
	{
	int		got;

	got= sioInReadBytes( dis->disSisIn, buffer, count- done );
	if  ( got <= 0 )
	    { dis->disExhausted= 1; break;	}

	appDebug( "%*s", got, buffer );

	done += got;
	buffer += got;
	}

    return done;
    }

SimpleInputStream * sioInDebugOpen(	SimpleInputStream *	sisIn )
    {
    SimpleInputStream *		sis;
    DebugedInputStream *		dis;

    dis= malloc( sizeof(DebugedInputStream) );
    if  ( ! dis )
	{ XDEB(dis); return (SimpleInputStream *)0;	}

    dis->disSisIn= sisIn;
    dis->disExhausted= 0;

    sis= sioInOpen( (void *)dis,
			    sioInDebugReadBytes, (SIOinSEEK)0, sioDebugClose );

    if  ( ! sis )
	{ XDEB(sis); free( dis ); return (SimpleInputStream *)0; }

    return sis;
    }

/************************************************************************/
/*									*/
/************************************************************************/

typedef struct DebuggingOutputStream
    {
    SimpleOutputStream *	dosSosOut;
    } DebuggingOutputStream;

static int sioOutDebugWriteBytes(	void *			voiddos,
					const unsigned char *	buffer,
					int			count )
    {
    DebuggingOutputStream *	dos= (DebuggingOutputStream *)voiddos;

    appDebug( "%*s", count, buffer );

    if  ( dos->dosSosOut )
	{ return sioOutWriteBytes( dos->dosSosOut, buffer, count );	}
    else{ return count;							}
    }

SimpleOutputStream * sioOutDebugOpen(	SimpleOutputStream *	sosOut )
    {
    SimpleOutputStream *	sos;
    DebuggingOutputStream *	dos;

    dos= malloc( sizeof(DebugedInputStream) );
    if  ( ! dos )
	{ XDEB(dos); return (SimpleOutputStream *)0;	}

    dos->dosSosOut= sosOut;

    sos= sioOutOpen( (void *)dos, sioOutDebugWriteBytes,
						(SIOoutSEEK)0, sioDebugClose );

    if  ( ! sos )
	{ XDEB(sos); free( dos ); return (SimpleOutputStream *)0; }

    return sos;
    }