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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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