comparison src/lib/istream-limit.c @ 9006:06bd1266f0c7 HEAD

istreams: Fixed some parent stream seeking issues.
author Timo Sirainen <tss@iki.fi>
date Fri, 01 May 2009 14:50:08 -0400
parents b9faf4db2a9f
children b1a27ed69e60
comparison
equal deleted inserted replaced
9005:e87431fb8c90 9006:06bd1266f0c7
52 i_stream_seek(stream->parent, 52 i_stream_seek(stream->parent,
53 lstream->istream.parent_start_offset + 53 lstream->istream.parent_start_offset +
54 stream->istream.v_offset); 54 stream->istream.v_offset);
55 } 55 }
56 56
57 stream->pos -= stream->skip;
58 stream->skip = 0;
59
57 stream->buffer = i_stream_get_data(stream->parent, &pos); 60 stream->buffer = i_stream_get_data(stream->parent, &pos);
58 if (pos <= stream->pos) { 61 if (pos > stream->pos)
62 ret = 0;
63 else do {
59 if ((ret = i_stream_read(stream->parent)) == -2) 64 if ((ret = i_stream_read(stream->parent)) == -2)
60 return -2; 65 return -2;
61 66
62 stream->istream.stream_errno = stream->parent->stream_errno; 67 stream->istream.stream_errno = stream->parent->stream_errno;
63 stream->istream.eof = stream->parent->eof; 68 stream->istream.eof = stream->parent->eof;
64 stream->buffer = i_stream_get_data(stream->parent, &pos); 69 stream->buffer = i_stream_get_data(stream->parent, &pos);
65 } else { 70 } while (pos <= stream->pos && ret > 0);
66 ret = 0;
67 }
68
69 stream->pos -= stream->skip;
70 stream->skip = 0;
71 71
72 if (lstream->v_size != (uoff_t)-1) { 72 if (lstream->v_size != (uoff_t)-1) {
73 left = lstream->v_size - stream->istream.v_offset; 73 left = lstream->v_size - stream->istream.v_offset;
74 if (pos >= left) { 74 if (pos >= left) {
75 pos = left; 75 pos = left;