Mercurial > dovecot > original-hg > dovecot-1.2
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; |