Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib/istream.c @ 4891:6ab2712f1a93 HEAD
Only imap binary was actually working.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 10 Dec 2006 14:35:02 +0200 |
parents | 1a35d53c18fc |
children | 81394e71f92a |
rev | line source |
---|---|
1741
9df02b1533b3
Removed most of the license comments from src/lib/*.c. It's just fine to
Timo Sirainen <tss@iki.fi>
parents:
1401
diff
changeset
|
1 /* Copyright (c) 2002-2003 Timo Sirainen */ |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
3241
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
4 #include "ioloop.h" |
3240
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
5 #include "str.h" |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "istream-internal.h" |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
4070
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
8 void i_stream_destroy(struct istream **stream) |
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
9 { |
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
10 i_stream_close(*stream); |
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
11 i_stream_unref(stream); |
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
12 } |
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
13 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
14 void i_stream_ref(struct istream *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 { |
1027 | 16 _io_stream_ref(&stream->real_stream->iostream); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
19 void i_stream_unref(struct istream **stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 { |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
21 struct _istream *_stream = (*stream)->real_stream; |
3240
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
22 |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
23 if (_stream->iostream.refcount == 1) { |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
24 if (_stream->line_str != NULL) |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
25 str_free(&_stream->line_str); |
3240
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
26 } |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
27 _io_stream_unref(&(*stream)->real_stream->iostream); |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
28 *stream = NULL; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
31 int i_stream_get_fd(struct istream *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
33 struct _istream *_stream = stream->real_stream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 return _stream->fd; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
38 void i_stream_close(struct istream *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 { |
1027 | 40 _io_stream_close(&stream->real_stream->iostream); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 stream->closed = TRUE; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
44 void i_stream_set_max_buffer_size(struct istream *stream, size_t max_size) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 { |
1027 | 46 _io_stream_set_max_buffer_size(&stream->real_stream->iostream, |
47 max_size); | |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
50 ssize_t i_stream_read(struct istream *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
52 struct _istream *_stream = stream->real_stream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 if (stream->closed) |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 return -1; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 |
2431
8e9d8cb1e674
Removed istream.disconnected, it's too much of a special case and the only
Timo Sirainen <tss@iki.fi>
parents:
2421
diff
changeset
|
57 stream->eof = FALSE; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 return _stream->read(_stream); |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
61 void i_stream_skip(struct istream *stream, uoff_t count) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
63 struct _istream *_stream = stream->real_stream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 size_t data_size; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 |
1853 | 66 data_size = _stream->pos - _stream->skip; |
67 if (count <= data_size) { | |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
68 /* within buffer */ |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 stream->v_offset += count; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 _stream->skip += count; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 return; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
74 /* have to seek forward */ |
1853 | 75 count -= data_size; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 _stream->skip = _stream->pos; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 stream->v_offset += data_size; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
79 if (stream->closed) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
80 return; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
81 |
3629
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
82 _stream->seek(_stream, stream->v_offset + count, FALSE); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
85 void i_stream_seek(struct istream *stream, uoff_t v_offset) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
87 struct _istream *_stream = stream->real_stream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 |
2186 | 89 if (v_offset >= stream->v_offset) { |
1874 | 90 i_stream_skip(stream, v_offset - stream->v_offset); |
91 return; | |
92 } | |
93 | |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 if (stream->closed) |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 return; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 |
2431
8e9d8cb1e674
Removed istream.disconnected, it's too much of a special case and the only
Timo Sirainen <tss@iki.fi>
parents:
2421
diff
changeset
|
97 stream->eof = FALSE; |
3629
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
98 _stream->seek(_stream, v_offset, FALSE); |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
99 } |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
100 |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
101 void i_stream_seek_mark(struct istream *stream, uoff_t v_offset) |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
102 { |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
103 struct _istream *_stream = stream->real_stream; |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
104 |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
105 if (stream->closed) |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
106 return; |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
107 |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
108 stream->eof = FALSE; |
e05a1af4bbc7
Added i_stream_seek_mark() and used it
Timo Sirainen <tss@iki.fi>
parents:
3241
diff
changeset
|
109 _stream->seek(_stream, v_offset, TRUE); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 |
3241
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
112 void i_stream_sync(struct istream *stream) |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
113 { |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
114 struct _istream *_stream = stream->real_stream; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
115 |
3241
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
116 if (!stream->closed && _stream->sync != NULL) |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
117 _stream->sync(_stream); |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
118 } |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
119 |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3647
diff
changeset
|
120 const struct stat *i_stream_stat(struct istream *stream, bool exact) |
3241
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
121 { |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
122 struct _istream *_stream = stream->real_stream; |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
123 |
3630
7a9ae11167de
i_stream_stat() should return NULL for closed istreams
Timo Sirainen <tss@iki.fi>
parents:
3629
diff
changeset
|
124 if (stream->closed) |
7a9ae11167de
i_stream_stat() should return NULL for closed istreams
Timo Sirainen <tss@iki.fi>
parents:
3629
diff
changeset
|
125 return NULL; |
7a9ae11167de
i_stream_stat() should return NULL for closed istreams
Timo Sirainen <tss@iki.fi>
parents:
3629
diff
changeset
|
126 |
3647
7af5162d934c
Added exact parameter to i_stream_stat()
Timo Sirainen <tss@iki.fi>
parents:
3630
diff
changeset
|
127 return _stream->stat(_stream, exact); |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
128 } |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
129 |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3647
diff
changeset
|
130 bool i_stream_have_bytes_left(struct istream *stream) |
2788
f322b24da429
Added i_stream_have_bytes_left().
Timo Sirainen <tss@iki.fi>
parents:
2626
diff
changeset
|
131 { |
f322b24da429
Added i_stream_have_bytes_left().
Timo Sirainen <tss@iki.fi>
parents:
2626
diff
changeset
|
132 struct _istream *_stream = stream->real_stream; |
f322b24da429
Added i_stream_have_bytes_left().
Timo Sirainen <tss@iki.fi>
parents:
2626
diff
changeset
|
133 |
f322b24da429
Added i_stream_have_bytes_left().
Timo Sirainen <tss@iki.fi>
parents:
2626
diff
changeset
|
134 return !stream->eof || _stream->skip != _stream->pos; |
f322b24da429
Added i_stream_have_bytes_left().
Timo Sirainen <tss@iki.fi>
parents:
2626
diff
changeset
|
135 } |
f322b24da429
Added i_stream_have_bytes_left().
Timo Sirainen <tss@iki.fi>
parents:
2626
diff
changeset
|
136 |
3240
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
137 static char *i_stream_next_line_finish(struct _istream *stream, size_t i) |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
138 { |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
139 char *ret; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
140 size_t end; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
141 |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
142 if (i > 0 && stream->buffer[i-1] == '\r') |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
143 end = i - 1; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
144 else |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
145 end = i; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
146 |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
147 if (stream->w_buffer != NULL) { |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
148 /* modify the buffer directly */ |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
149 stream->w_buffer[end] = '\0'; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
150 ret = (char *)stream->w_buffer + stream->skip; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
151 } else { |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
152 /* use a temporary string to return it */ |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
153 if (stream->line_str == NULL) |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
154 stream->line_str = str_new(default_pool, 256); |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
155 str_truncate(stream->line_str, 0); |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
156 str_append_n(stream->line_str, stream->buffer + stream->skip, |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
157 end - stream->skip); |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4070
diff
changeset
|
158 ret = str_c_modifiable(stream->line_str); |
3240
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
159 } |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
160 |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
161 i++; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
162 stream->istream.v_offset += i - stream->skip; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
163 stream->skip = i; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
164 return ret; |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
165 } |
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
166 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
167 char *i_stream_next_line(struct istream *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
169 struct _istream *_stream = stream->real_stream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 char *ret_buf; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 size_t i; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 i_assert(stream != NULL); |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 |
1846 | 175 if (_stream->skip >= _stream->pos) { |
176 stream->stream_errno = 0; | |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 return NULL; |
1846 | 178 } |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
180 if (_stream->w_buffer == NULL) { |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4070
diff
changeset
|
181 i_error("i_stream_next_line() called for unmodifiable stream"); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
182 return NULL; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
184 |
805
5ac361acb316
Marked all non-trivial buffer modifications with @UNSAFE tag. Several
Timo Sirainen <tss@iki.fi>
parents:
764
diff
changeset
|
185 /* @UNSAFE */ |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 ret_buf = NULL; |
918
23b42ffe8756
Removed cr_lookup_pos optimization with i_stream_next_line(). It breaks if
Timo Sirainen <tss@iki.fi>
parents:
903
diff
changeset
|
187 for (i = _stream->skip; i < _stream->pos; i++) { |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
188 if (_stream->buffer[i] == 10) { |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
189 /* got it */ |
3240
a6af023db10d
i_stream_next_line() works now even if the stream buffer can't be directly
Timo Sirainen <tss@iki.fi>
parents:
2788
diff
changeset
|
190 ret_buf = i_stream_next_line_finish(_stream, i); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
191 break; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
192 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
193 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
194 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
195 return ret_buf; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
196 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 |
1293
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
198 char *i_stream_read_next_line(struct istream *stream) |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
199 { |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
200 char *line; |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
201 |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
202 line = i_stream_next_line(stream); |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
203 if (line != NULL) |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
204 return line; |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
205 |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
206 if (i_stream_read(stream) > 0) |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
207 line = i_stream_next_line(stream); |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
208 return line; |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
209 } |
2f2c6335ed6d
Added i_stream_read_next_line()
Timo Sirainen <tss@iki.fi>
parents:
1027
diff
changeset
|
210 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
211 const unsigned char *i_stream_get_data(struct istream *stream, size_t *size) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
212 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
213 struct _istream *_stream = stream->real_stream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
214 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
215 if (_stream->skip >= _stream->pos) { |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
216 *size = 0; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
217 return NULL; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
218 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
219 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
220 *size = _stream->pos - _stream->skip; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
221 return _stream->buffer + _stream->skip; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
222 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
223 |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4070
diff
changeset
|
224 unsigned char *i_stream_get_modifiable_data(struct istream *stream, |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
225 size_t *size) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
226 { |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
227 struct _istream *_stream = stream->real_stream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
228 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
229 if (_stream->skip >= _stream->pos || _stream->w_buffer == NULL) { |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
230 *size = 0; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
231 return NULL; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
232 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
233 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
234 *size = _stream->pos - _stream->skip; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
235 return _stream->w_buffer + _stream->skip; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
236 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
237 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
238 int i_stream_read_data(struct istream *stream, const unsigned char **data, |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
239 size_t *size, size_t threshold) |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
240 { |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
241 ssize_t ret = 0; |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3647
diff
changeset
|
242 bool read_more = FALSE; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
243 |
2165
4c5732a9e2bc
i_stream_read_data(): don't call read() unless we have to
Timo Sirainen <tss@iki.fi>
parents:
2160
diff
changeset
|
244 do { |
4c5732a9e2bc
i_stream_read_data(): don't call read() unless we have to
Timo Sirainen <tss@iki.fi>
parents:
2160
diff
changeset
|
245 *data = i_stream_get_data(stream, size); |
4c5732a9e2bc
i_stream_read_data(): don't call read() unless we have to
Timo Sirainen <tss@iki.fi>
parents:
2160
diff
changeset
|
246 if (*size > threshold) |
4c5732a9e2bc
i_stream_read_data(): don't call read() unless we have to
Timo Sirainen <tss@iki.fi>
parents:
2160
diff
changeset
|
247 return 1; |
4c5732a9e2bc
i_stream_read_data(): don't call read() unless we have to
Timo Sirainen <tss@iki.fi>
parents:
2160
diff
changeset
|
248 |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
249 /* we need more data */ |
1312
c893ba64db07
Fixes for resetting stream limits. Should fix some APPEND problems.
Timo Sirainen <tss@iki.fi>
parents:
1293
diff
changeset
|
250 ret = i_stream_read(stream); |
2573
d10ad1e5a5aa
i_stream_read_data(): return -1 if we didn't read more data, even if buffer
Timo Sirainen <tss@iki.fi>
parents:
2459
diff
changeset
|
251 if (ret > 0) |
d10ad1e5a5aa
i_stream_read_data(): return -1 if we didn't read more data, even if buffer
Timo Sirainen <tss@iki.fi>
parents:
2459
diff
changeset
|
252 read_more = TRUE; |
2452
963d95591b49
i_stream_read_data(): don't loop if read() returns 0.
Timo Sirainen <tss@iki.fi>
parents:
2431
diff
changeset
|
253 } while (ret > 0); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
254 |
2265
1def5ca25efd
i_stream_read_data() could have returned invalid data at EOF (notable with
Timo Sirainen <tss@iki.fi>
parents:
2186
diff
changeset
|
255 *data = i_stream_get_data(stream, size); |
2165
4c5732a9e2bc
i_stream_read_data(): don't call read() unless we have to
Timo Sirainen <tss@iki.fi>
parents:
2160
diff
changeset
|
256 return ret == -2 ? -2 : |
2626
a2b910e21225
i_stream_read_data(): return 0 if i_stream_read() returned 0.
Timo Sirainen <tss@iki.fi>
parents:
2573
diff
changeset
|
257 (read_more || ret == 0 ? 0 : -1); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
258 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
259 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
260 struct istream *_i_stream_create(struct _istream *_stream, pool_t pool, int fd, |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
261 uoff_t abs_start_offset) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
262 { |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
263 _stream->fd = fd; |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
264 _stream->abs_start_offset = abs_start_offset; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
265 _stream->istream.real_stream = _stream; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
266 |
3241
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
267 memset(&_stream->statbuf, 0, sizeof(_stream->statbuf)); |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
268 _stream->statbuf.st_size = -1; |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
269 _stream->statbuf.st_atime = |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
270 _stream->statbuf.st_mtime = |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
271 _stream->statbuf.st_ctime = ioloop_time; |
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
272 |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
273 _io_stream_init(pool, &_stream->iostream); |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
274 return &_stream->istream; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
275 } |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
276 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
277 #ifdef STREAM_TEST |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
278 /* gcc istream.c -o teststream liblib.a -Wall -DHAVE_CONFIG_H -DSTREAM_TEST -g */ |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
279 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
280 #include <fcntl.h> |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
281 #include <unistd.h> |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
282 #include "ostream.h" |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
283 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
284 #define BUF_VALUE(offset) \ |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
285 (((offset) % 256) ^ ((offset) / 256)) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
286 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
287 static void check_buffer(const unsigned char *data, size_t size, size_t offset) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
288 { |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
289 size_t i; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
290 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
291 for (i = 0; i < size; i++) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
292 i_assert(data[i] == BUF_VALUE(i+offset)); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
293 } |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
294 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
295 int main(void) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
296 { |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
297 struct istream *input, *l_input; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
298 struct ostream *output1, *output2; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
299 int i, fd1, fd2; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
300 unsigned char buf[1024]; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
301 const unsigned char *data; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
302 size_t size; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
303 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
304 lib_init(); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
305 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
306 fd1 = open("teststream.1", O_RDWR | O_CREAT | O_TRUNC, 0600); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
307 if (fd1 < 0) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
308 i_fatal("open() failed: %m"); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
309 fd2 = open("teststream.2", O_RDWR | O_CREAT | O_TRUNC, 0600); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
310 if (fd2 < 0) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
311 i_fatal("open() failed: %m"); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
312 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
313 /* write initial data */ |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
314 for (i = 0; i < sizeof(buf); i++) |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
315 buf[i] = BUF_VALUE(i); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
316 write(fd1, buf, sizeof(buf)); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
317 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
318 /* test reading */ |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
319 input = i_stream_create_file(fd1, default_pool, 512, FALSE); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
320 i_assert(i_stream_get_size(input) == sizeof(buf)); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
321 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
322 i_assert(i_stream_read_data(input, &data, &size, 0) > 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
323 i_assert(size == 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
324 check_buffer(data, size, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
325 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
326 i_stream_seek(input, 256); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
327 i_assert(i_stream_read_data(input, &data, &size, 0) > 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
328 i_assert(size == 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
329 check_buffer(data, size, 256); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
330 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
331 i_stream_seek(input, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
332 i_assert(i_stream_read_data(input, &data, &size, 512) == -2); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
333 i_assert(size == 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
334 check_buffer(data, size, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
335 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
336 i_stream_skip(input, 900); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
337 i_assert(i_stream_read_data(input, &data, &size, 0) > 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
338 i_assert(size == sizeof(buf) - 900); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
339 check_buffer(data, size, 900); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
340 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
341 /* test moving data */ |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
342 output1 = o_stream_create_file(fd1, default_pool, 512, FALSE); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
343 output2 = o_stream_create_file(fd2, default_pool, 512, FALSE); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
344 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
345 i_stream_seek(input, 1); size = sizeof(buf)-1; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
346 i_assert(o_stream_send_istream(output2, input) == size); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
347 o_stream_flush(output2); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
348 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
349 lseek(fd2, 0, SEEK_SET); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
350 i_assert(read(fd2, buf, sizeof(buf)) == size); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
351 check_buffer(buf, size, 1); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
352 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
353 i_stream_seek(input, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
354 o_stream_seek(output1, sizeof(buf)); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
355 i_assert(o_stream_send_istream(output1, input) == sizeof(buf)); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
356 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
357 /* test moving with limits */ |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
358 l_input = i_stream_create_limit(default_pool, input, |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
359 sizeof(buf)/2, 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
360 i_stream_seek(l_input, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
361 o_stream_seek(output1, 10); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
362 i_assert(o_stream_send_istream(output1, l_input) == 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
363 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
364 i_stream_set_max_buffer_size(input, sizeof(buf)); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
365 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
366 i_stream_seek(input, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
367 i_assert(i_stream_read_data(input, &data, &size, sizeof(buf)-1) > 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
368 i_assert(size == sizeof(buf)); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
369 check_buffer(data, 10, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
370 check_buffer(data + 10, 512, sizeof(buf)/2); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
371 check_buffer(data + 10 + 512, |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
372 size - (10 + 512), 10 + 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
373 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
374 /* reading within limits */ |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
375 i_stream_seek(l_input, 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
376 i_assert(i_stream_read_data(l_input, &data, &size, 511) > 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
377 i_assert(size == 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
378 i_assert(i_stream_read_data(l_input, &data, &size, 512) == -2); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
379 i_assert(size == 512); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
380 i_stream_skip(l_input, 511); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
381 i_assert(i_stream_read_data(l_input, &data, &size, 0) > 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
382 i_assert(size == 1); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
383 i_stream_skip(l_input, 1); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
384 i_assert(i_stream_read_data(l_input, &data, &size, 0) == -1); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
385 i_assert(size == 0); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
386 |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
387 unlink("teststream.1"); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
388 unlink("teststream.2"); |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
389 return 0; |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
390 } |
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1861
diff
changeset
|
391 #endif |