… | |
… | |
9 | |
9 | |
10 | first = last = (chunk *)salloc<char> (sizeof (chunk) + initial); |
10 | first = last = (chunk *)salloc<char> (sizeof (chunk) + initial); |
11 | first->alloc = sizeof (chunk) + initial; |
11 | first->alloc = sizeof (chunk) + initial; |
12 | first->next = 0; |
12 | first->next = 0; |
13 | |
13 | |
14 | room = initial; |
|
|
15 | ptr = first->data; |
14 | ptr = first->data; |
|
|
15 | end = ptr + initial; |
16 | } |
16 | } |
17 | |
17 | |
18 | dynbuf::~dynbuf () |
18 | dynbuf::~dynbuf () |
19 | { |
19 | { |
20 | clear (); |
20 | clear (); |
… | |
… | |
56 | add->next = 0; |
56 | add->next = 0; |
57 | |
57 | |
58 | last->next = add; |
58 | last->next = add; |
59 | last = add; |
59 | last = add; |
60 | |
60 | |
61 | room = ext; |
|
|
62 | ptr = last->data; |
61 | ptr = last->data; |
|
|
62 | end = ptr + ext; |
63 | } |
63 | } |
64 | |
64 | |
65 | void |
65 | void |
66 | dynbuf::linearise (void *data) |
66 | dynbuf::linearise (void *data) |
67 | { |
67 | { |
… | |
… | |
90 | linearise ((void *)add->data); |
90 | linearise ((void *)add->data); |
91 | clear (); |
91 | clear (); |
92 | |
92 | |
93 | first = last = add; |
93 | first = last = add; |
94 | ptr = last->data + _size; |
94 | ptr = last->data + _size; |
|
|
95 | end = ptr; |
95 | _size = 0; |
96 | _size = 0; |
96 | room = 0; |
|
|
97 | } |
97 | } |
98 | |
98 | |
99 | return first->data; |
99 | return first->data; |
100 | } |
100 | } |
101 | |
101 | |
… | |
… | |
113 | { |
113 | { |
114 | force (128); |
114 | force (128); |
115 | |
115 | |
116 | va_list ap; |
116 | va_list ap; |
117 | va_start (ap, format); |
117 | va_start (ap, format); |
118 | len = vsnprintf (ptr, room, format, ap); |
118 | len = vsnprintf (ptr, end - ptr, format, ap); |
119 | va_end (ap); |
119 | va_end (ap); |
120 | |
120 | |
121 | assert (len >= 0); // shield against broken vsnprintf's |
121 | assert (len >= 0); // shield against broken vsnprintf's |
122 | |
122 | |
123 | // was enough room available |
123 | // was enough room available |
124 | if (len < room) |
124 | if (ptr + len < end) |
125 | { |
125 | { |
126 | alloc (len); |
126 | alloc (len); |
127 | return; |
127 | return; |
128 | } |
128 | } |
129 | } |
129 | } |