Mercurial > dovecot > core-2.2
annotate src/lib/istream-internal.h @ 12415:236ed6d5b391
istream: Exported i_stream_default_seek()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 15 Nov 2010 15:31:02 +0000 |
parents | 88d7a36c7fa5 |
children |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
1 #ifndef ISTREAM_INTERNAL_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
2 #define ISTREAM_INTERNAL_H |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "istream.h" |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "iostream-internal.h" |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 |
11309
88d7a36c7fa5
Use IO_BLOCK_SIZE macro to specify how large read/write syscalls to use.
Timo Sirainen <tss@iki.fi>
parents:
10810
diff
changeset
|
7 #define I_STREAM_MIN_SIZE IO_BLOCK_SIZE |
5482
834118e5329f
Moved I_STREAM_MIN_SIZE to header
Timo Sirainen <tss@iki.fi>
parents:
5481
diff
changeset
|
8 |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
9 struct istream_private { |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 /* inheritance: */ |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
11 struct iostream_private iostream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 /* methods: */ |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
14 ssize_t (*read)(struct istream_private *stream); |
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
15 void (*seek)(struct istream_private *stream, |
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
16 uoff_t v_offset, bool mark); |
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
17 void (*sync)(struct istream_private *stream); |
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
18 const struct stat *(*stat)(struct istream_private *stream, bool exact); |
8922
5106852f552a
Added i_stream_get_size(). Use it instead of i_stream_stat() where possible.
Timo Sirainen <tss@iki.fi>
parents:
8438
diff
changeset
|
19 int (*get_size)(struct istream_private *stream, bool exact, uoff_t *size_r); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 /* data: */ |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
764
diff
changeset
|
22 struct istream istream; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 int fd; |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1312
diff
changeset
|
25 uoff_t abs_start_offset; |
3241
b79853b4b005
Replaced i_stream_get_size() with i_stream_stat(). Added i_stream_sync().
Timo Sirainen <tss@iki.fi>
parents:
3240
diff
changeset
|
26 struct stat statbuf; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 |
5479
b3999af65adb
If istream implementation doesn't set set_max_buffer_size() or stat(),
Timo Sirainen <tss@iki.fi>
parents:
4292
diff
changeset
|
28 const unsigned char *buffer; |
b3999af65adb
If istream implementation doesn't set set_max_buffer_size() or stat(),
Timo Sirainen <tss@iki.fi>
parents:
4292
diff
changeset
|
29 unsigned char *w_buffer; /* may be NULL */ |
b3999af65adb
If istream implementation doesn't set set_max_buffer_size() or stat(),
Timo Sirainen <tss@iki.fi>
parents:
4292
diff
changeset
|
30 |
9777
85abd99007c3
Added i_stream_set_init_buffer_size().
Timo Sirainen <tss@iki.fi>
parents:
9196
diff
changeset
|
31 size_t buffer_size, max_buffer_size, init_buffer_size; |
1870
c972ea085643
istream rewrite. instead of directly setting any limits to stream, you now
Timo Sirainen <tss@iki.fi>
parents:
1312
diff
changeset
|
32 size_t skip, pos; |
5479
b3999af65adb
If istream implementation doesn't set set_max_buffer_size() or stat(),
Timo Sirainen <tss@iki.fi>
parents:
4292
diff
changeset
|
33 |
7030
1a89a1509e81
Use istream_private->parent pointer globally instead of each filter stream
Timo Sirainen <tss@iki.fi>
parents:
6558
diff
changeset
|
34 struct istream *parent; /* for filter streams */ |
7032
85cf52f0bc64
i_stream_create() now takes parent stream as parameter and internally sets
Timo Sirainen <tss@iki.fi>
parents:
7030
diff
changeset
|
35 uoff_t parent_start_offset; |
85cf52f0bc64
i_stream_create() now takes parent stream as parameter and internally sets
Timo Sirainen <tss@iki.fi>
parents:
7030
diff
changeset
|
36 |
10810
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
37 /* parent stream's expected offset is kept here. i_stream_read() |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
38 always seeks parent stream to here before calling read(). */ |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
39 uoff_t parent_expected_offset; |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
40 |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
41 /* increased every time the stream is changed (e.g. seek, read). |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
42 this way streams can check if their parent streams have been |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
43 accessed behind them. */ |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
44 unsigned int access_counter; |
de2798fbbae6
istreams: Reading sometimes returned wrong data, if parent istream had been modified.
Timo Sirainen <tss@iki.fi>
parents:
9777
diff
changeset
|
45 |
5479
b3999af65adb
If istream implementation doesn't set set_max_buffer_size() or stat(),
Timo Sirainen <tss@iki.fi>
parents:
4292
diff
changeset
|
46 string_t *line_str; /* for i_stream_next_line() if w_buffer == NULL */ |
8438
1baa595093f5
Added i_stream_set_return_partial_line().
Timo Sirainen <tss@iki.fi>
parents:
7032
diff
changeset
|
47 unsigned int return_nolf_line:1; |
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 |
6142
6c0bfc35af03
Removed memory pool parameter from iostreams. Default pool was almost always
Timo Sirainen <tss@iki.fi>
parents:
5482
diff
changeset
|
50 struct istream * |
7032
85cf52f0bc64
i_stream_create() now takes parent stream as parameter and internally sets
Timo Sirainen <tss@iki.fi>
parents:
7030
diff
changeset
|
51 i_stream_create(struct istream_private *stream, struct istream *parent, int fd); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
53 void i_stream_compress(struct istream_private *stream); |
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
54 void i_stream_grow_buffer(struct istream_private *stream, size_t bytes); |
6558
4a1caf69ca14
Added i_stream_get_buffer_space() to remove code duplication.
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
55 bool i_stream_get_buffer_space(struct istream_private *stream, |
4a1caf69ca14
Added i_stream_get_buffer_space() to remove code duplication.
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
56 size_t wanted_size, size_t *size_r); |
9196
ef0c861608d9
istreams: Fixed some parent stream seeking issues.
Timo Sirainen <tss@iki.fi>
parents:
8922
diff
changeset
|
57 ssize_t i_stream_read_copy_from_parent(struct istream *istream); |
12415
236ed6d5b391
istream: Exported i_stream_default_seek()
Timo Sirainen <tss@iki.fi>
parents:
11309
diff
changeset
|
58 void i_stream_default_seek(struct istream_private *stream, |
236ed6d5b391
istream: Exported i_stream_default_seek()
Timo Sirainen <tss@iki.fi>
parents:
11309
diff
changeset
|
59 uoff_t v_offset, bool mark); |
5479
b3999af65adb
If istream implementation doesn't set set_max_buffer_size() or stat(),
Timo Sirainen <tss@iki.fi>
parents:
4292
diff
changeset
|
60 |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 #endif |