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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
/* HTChunk: Flexible array handling for libwww
CHUNK HANDLING:
FLEXIBLE ARRAYS
This module implements a flexible array. It is a general utility module. A chunk is a
structure which may be extended. These routines create and append data to chunks,
automatically reallocating them as necessary.
*/
typedef struct {
int size; /* In bytes */
int growby; /* Allocation unit in bytes */
int allocated; /* Current size of *data */
char * data; /* Pointer to malloced area or 0 */
} HTChunk;
#ifdef SHORT_NAMES
#define HTChunkClear HTChClea
#define HTChunkPutc HTChPutc
#define HTChunkPuts HTChPuts
#define HTChunkCreate HTChCrea
#define HTChunkTerminate HTChTerm
#define HTChunkEnsure HtChEnsu
#endif
/*
Create new chunk
ON ENTRY,
growby The number of bytes to allocate at a time when the chunk is
later extended. Arbitrary but normally a trade-off time vs.
memory
ON EXIT,
returns A chunk pointer to the new chunk,
*/
extern HTChunk * HTChunkCreate PARAMS((int growby));
/*
Free a chunk
ON ENTRY,
ch A valid chunk pointer made by HTChunkCreate()
ON EXIT,
ch is invalid and may not be used.
*/
extern void HTChunkFree PARAMS((HTChunk * ch));
/*
Clear a chunk
ON ENTRY,
ch A valid chunk pointer made by HTChunkCreate()
ON EXIT,
*ch The size of the chunk is zero.
*/
extern void HTChunkClear PARAMS((HTChunk * ch));
/*
Ensure a chunk has a certain space in
ON ENTRY,
ch A valid chunk pointer made by HTChunkCreate()
s The size required
ON EXIT,
*ch Has size at least s
*/
extern void HTChunkEnsure PARAMS((HTChunk * ch, int s));
/*
Append a character to a chunk
ON ENTRY,
ch A valid chunk pointer made by HTChunkCreate()
c The character to be appended
ON EXIT,
*ch Is one character bigger
*/
extern void HTChunkPutc PARAMS((HTChunk * ch, char c));
/*
Append a string to a chunk
ON ENTRY,
ch A valid chunk pointer made by HTChunkCreate()
str Tpoints to a zero-terminated string to be appended
ON EXIT,
*ch Is bigger by strlen(str)
*/
extern void HTChunkPuts PARAMS((HTChunk * ch, const char *str));
/*
Append a zero character to a chunk
*/
/*
ON ENTRY,
ch A valid chunk pointer made by HTChunkCreate()
ON EXIT,
*ch Is one character bigger
*/
extern void HTChunkTerminate PARAMS((HTChunk * ch));
/*
end */
|