84 DBG(cerr <<
"underflow..." << endl);
85 DBG2(cerr <<
"eback(): " << (
void *)eback() <<
", gptr(): " << (
void *)(gptr() - eback())
86 <<
", egptr(): " << (
void *)(egptr() - eback()) << endl);
90 return traits_type::to_int_type(*gptr());
96 d_is.read((
char *)&header, 4);
100 header = ntohl(header);
107 return traits_type::eof();
110 if (!d_set_twiddle) {
112 d_set_twiddle =
true;
117 DBG(cerr <<
"underflow: chunk size from header: " << chunk_size << endl);
118 DBG(cerr <<
"underflow: chunk type from header: " << hex << (header &
CHUNK_TYPE_MASK) << endl);
119 DBG(cerr <<
"underflow: chunk byte order from header: " << hex << (header & CHUNK_BIG_ENDIAN) << endl);
122 if (chunk_size > d_buf_size) {
123 d_buf_size = chunk_size;
129 return traits_type::eof();
132 d_is.read(d_buffer, chunk_size);
133 DBG2(cerr <<
"underflow: size read: " << d_is.gcount() <<
", eof: " << d_is.eof() <<
", bad: " << d_is.bad()
136 return traits_type::eof();
138 DBG2(cerr <<
"eback(): " << (
void *)eback() <<
", gptr(): " << (
void *)(gptr() - eback())
139 <<
", egptr(): " << (
void *)(egptr() - eback()) << endl);
142 d_buffer + chunk_size);
144 DBG2(cerr <<
"eback(): " << (
void *)eback() <<
", gptr(): " << (
void *)(gptr() - eback())
145 <<
", egptr(): " << (
void *)(egptr() - eback()) << endl);
149 DBG2(cerr <<
"Found end chunk" << endl);
150 return traits_type::to_int_type(*gptr());
152 return traits_type::to_int_type(*gptr());
158 d_error_message = string(d_buffer, chunk_size);
159 return traits_type::eof();
162 d_error_message =
"Failed to read known chunk header type.";
163 return traits_type::eof();
184 DBG(cerr <<
"xsgetn... num: " << num << endl);
187 if (num <= (egptr() - gptr())) {
188 memcpy(s, gptr(), num);
191 return traits_type::not_eof(num);
195 uint32_t bytes_left_to_read = num;
198 if (gptr() < egptr()) {
199 int bytes_to_transfer = egptr() - gptr();
200 memcpy(s, gptr(), bytes_to_transfer);
201 gbump(bytes_to_transfer);
202 s += bytes_to_transfer;
203 bytes_left_to_read -= bytes_to_transfer;
219 d_is.read((
char *)&header, 4);
221 header = ntohl(header);
228 return traits_type::eof();
231 if (!d_set_twiddle) {
233 d_set_twiddle =
true;
237 DBG(cerr <<
"xsgetn: chunk size from header: " << chunk_size << endl);
238 DBG(cerr <<
"xsgetn: chunk type from header: " << hex << (header &
CHUNK_TYPE_MASK) << endl);
239 DBG(cerr <<
"xsgetn: chunk byte order from header: " << hex << (header & CHUNK_BIG_ENDIAN) << endl);
247 std::vector<char> message(chunk_size);
248 d_is.read(message.data(), chunk_size);
249 d_error_message = string(message.data(), chunk_size);
251 setg(d_buffer, d_buffer, d_buffer);
255 return traits_type::not_eof(num - bytes_left_to_read);
259 else if (chunk_size > bytes_left_to_read) {
260 d_is.read(s, bytes_left_to_read);
262 return traits_type::eof();
265 uint32_t bytes_leftover = chunk_size - bytes_left_to_read;
267 if (bytes_leftover > d_buf_size) {
268 d_buf_size = chunk_size;
272 d_is.read(d_buffer, bytes_leftover);
274 return traits_type::eof();
278 d_buffer + bytes_leftover );
280 bytes_left_to_read = 0 ;
283 if (chunk_size > d_buf_size) {
284 d_buf_size = chunk_size;
289 if (chunk_size > 0) {
290 d_is.read(s, chunk_size);
292 return traits_type::eof();
293 bytes_left_to_read -= chunk_size ;
300 DBG(cerr <<
"Found end chunk" << endl);
308 done = bytes_left_to_read == 0;
314 return traits_type::eof();
318 d_error_message =
"Failed to read known chunk header type.";
319 return traits_type::eof();
323 return traits_type::not_eof(num - bytes_left_to_read);
341 d_is.read((
char *)&header, 4);
343 header = ntohl(header);
350 return traits_type::eof();
353 if (!d_set_twiddle) {
355 d_set_twiddle =
true;
360 DBG(cerr <<
"read_next_chunk: chunk size from header: " << chunk_size << endl);
361 DBG(cerr <<
"read_next_chunk: chunk type from header: " << hex << (header &
CHUNK_TYPE_MASK) << endl);
362 DBG(cerr <<
"read_next_chunk: chunk byte order from header: " << hex << (header & CHUNK_BIG_ENDIAN) << endl);
365 if (chunk_size > d_buf_size) {
366 d_buf_size = chunk_size;
372 return traits_type::eof();
375 d_is.read(d_buffer, chunk_size);
376 DBG2(cerr <<
"read_next_chunk: size read: " << d_is.gcount() <<
", eof: " << d_is.eof() <<
", bad: " << d_is.bad()
379 return traits_type::eof();
381 DBG2(cerr <<
"eback(): " << (
void *)eback() <<
", gptr(): " << (
void *)(gptr() - eback())
382 <<
", egptr(): " << (
void *)(egptr() - eback()) << endl);
385 d_buffer + chunk_size);
387 DBG2(cerr <<
"eback(): " << (
void *)eback() <<
", gptr(): " << (
void *)(gptr() - eback())
388 <<
", egptr(): " << (
void *)(egptr() - eback()) << endl);
392 DBG(cerr <<
"Found end chunk" << endl);
393 return traits_type::not_eof(chunk_size);
396 return traits_type::not_eof(chunk_size);
402 d_error_message = string(d_buffer, chunk_size);
403 return traits_type::eof();
407 d_error_message =
"Failed to read known chunk header type.";
408 return traits_type::eof();