Mercurial > dovecot > core-2.2
annotate src/lib/ostream-failure-at.c @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | 2e2563132d5f |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
20799
diff
changeset
|
1 /* Copyright (c) 2015-2017 Dovecot authors, see the included COPYING file */ |
18866
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "buffer.h" |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "ostream-private.h" |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "ostream-failure-at.h" |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 struct failure_at_ostream { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 struct ostream_private ostream; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 char *error_string; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 uoff_t failure_offset; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 bool failed; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 }; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 static void o_stream_failure_at_destroy(struct iostream_private *stream) |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 struct failure_at_ostream *fstream = |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 (struct failure_at_ostream *)stream; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 i_free(fstream->error_string); |
19362
28f088e237d9
lib: fix memory leaks in failure-at streams
Phil Carmody <phil@dovecot.fi>
parents:
18866
diff
changeset
|
21 o_stream_unref(&fstream->ostream.parent); |
18866
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 static ssize_t |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 o_stream_failure_at_sendv(struct ostream_private *stream, |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 const struct const_iovec *iov, unsigned int iov_count) |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 struct failure_at_ostream *fstream = |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 (struct failure_at_ostream *)stream; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 unsigned int i; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 struct const_iovec *iov_dup; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 unsigned int iov_dup_count; |
20799
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
33 uoff_t bytes_until_failure, blocking_bytes_count = 0; |
18866
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 ssize_t ret; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 |
20799
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
36 if (stream->ostream.blocking) { |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
37 /* blocking ostream must return either a full success or a |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
38 failure. if the current write would go past failure_offset, |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
39 return a failure now before writing anything. */ |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
40 for (i = 0; i < iov_count; i++) |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
41 blocking_bytes_count += iov[i].iov_len; |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
42 if (blocking_bytes_count > 0) { |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
43 /* if we're exactly at the failure offset after this |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
44 write, fail it only on the next write. */ |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
45 blocking_bytes_count--; |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
46 } |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
47 } |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
48 |
a46ba877e377
lib: Fixed ostream-failure-at with blocking parent stream.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
49 if (fstream->failure_offset <= stream->ostream.offset + blocking_bytes_count) { |
18866
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 io_stream_set_error(&stream->iostream, "%s", |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 fstream->error_string); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 stream->ostream.stream_errno = errno = EIO; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 fstream->failed = TRUE; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 return -1; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 bytes_until_failure = fstream->failure_offset - stream->ostream.offset; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 iov_dup = i_new(struct const_iovec, iov_count); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 iov_dup_count = iov_count; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 for (i = 0; i < iov_count; i++) { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 iov_dup[i] = iov[i]; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 if (iov_dup[i].iov_len >= bytes_until_failure) { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 iov_dup[i].iov_len = bytes_until_failure; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 iov_dup_count = i+1; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 break; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 ret = o_stream_sendv(stream->parent, iov_dup, iov_dup_count); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 i_free(iov_dup); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 if (ret < 0) { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 o_stream_copy_error_from_parent(stream); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 return -1; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 stream->ostream.offset += ret; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 return ret; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 static int |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 o_stream_failure_at_flush(struct ostream_private *stream) |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 struct failure_at_ostream *fstream = |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 (struct failure_at_ostream *)stream; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 if (fstream->failed) { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 io_stream_set_error(&stream->iostream, "%s", |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 fstream->error_string); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 stream->ostream.stream_errno = errno = EIO; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 return -1; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 return o_stream_flush(stream->parent); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 struct ostream * |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 o_stream_create_failure_at(struct ostream *output, uoff_t failure_offset, |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 const char *error_string) |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 struct failure_at_ostream *fstream; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 fstream = i_new(struct failure_at_ostream, 1); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 fstream->ostream.sendv = o_stream_failure_at_sendv; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 fstream->ostream.flush = o_stream_failure_at_flush; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 fstream->ostream.iostream.destroy = o_stream_failure_at_destroy; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 fstream->failure_offset = failure_offset; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 fstream->error_string = i_strdup(error_string); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 return o_stream_create(&fstream->ostream, output, |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 o_stream_get_fd(output)); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 } |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 struct ostream * |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 o_stream_create_failure_at_flush(struct ostream *output, const char *error_string) |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 { |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 struct failure_at_ostream *fstream; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 fstream = i_new(struct failure_at_ostream, 1); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 fstream->ostream.flush = o_stream_failure_at_flush; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 fstream->ostream.iostream.destroy = o_stream_failure_at_destroy; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 fstream->error_string = i_strdup(error_string); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 fstream->failed = TRUE; |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 return o_stream_create(&fstream->ostream, output, |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 o_stream_get_fd(output)); |
1c7288c054b1
lib: Added o_stream_create_failure_at() to inject EIO at given offset in ostream
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 } |