annotate src/lib/iostream.c @ 22955:812e5c961328

fts: Indexing virtual mailbox didn't always index the last mails
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 03 May 2018 18:33:00 +0300
parents cb108f786fb4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22713
cb108f786fb4 Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 22606
diff changeset
1 /* Copyright (c) 2002-2018 Dovecot authors, see the included COPYING file */
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"
16236
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
4 #include "array.h"
18989
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
5 #include "istream.h"
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
6 #include "ostream.h"
13529
cf77e448295c Renamed lib/*-internal.h files to lib/*-private.h for consistency.
Timo Sirainen <tss@iki.fi>
parents: 12782
diff changeset
7 #include "iostream-private.h"
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8
6419
3a960ffa5de8 If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents: 6415
diff changeset
9 static void
16020
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
10 io_stream_default_close(struct iostream_private *stream ATTR_UNUSED,
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
11 bool close_parent ATTR_UNUSED)
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
12 {
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
13 }
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
14
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
15 static void
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
16 io_stream_default_destroy(struct iostream_private *stream ATTR_UNUSED)
6419
3a960ffa5de8 If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents: 6415
diff changeset
17 {
3a960ffa5de8 If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents: 6415
diff changeset
18 }
3a960ffa5de8 If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents: 6415
diff changeset
19
6415
b0096861c390 Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents: 6142
diff changeset
20 void io_stream_init(struct iostream_private *stream)
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 {
6419
3a960ffa5de8 If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents: 6415
diff changeset
22 if (stream->close == NULL)
16020
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
23 stream->close = io_stream_default_close;
6419
3a960ffa5de8 If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents: 6415
diff changeset
24 if (stream->destroy == NULL)
16020
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
25 stream->destroy = io_stream_default_destroy;
6419
3a960ffa5de8 If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents: 6415
diff changeset
26
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 stream->refcount = 1;
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 }
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
6415
b0096861c390 Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents: 6142
diff changeset
30 void io_stream_ref(struct iostream_private *stream)
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 {
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 stream->refcount++;
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 }
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
6415
b0096861c390 Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents: 6142
diff changeset
35 void io_stream_unref(struct iostream_private *stream)
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 {
16236
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
37 const struct iostream_destroy_callback *dc;
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
38
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 i_assert(stream->refcount > 0);
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 if (--stream->refcount != 0)
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 return;
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
16020
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
43 stream->close(stream, FALSE);
12106
18ab89f4d6a1 iostream: Call destroy callback after the destroy() method is called.
Timo Sirainen <tss@iki.fi>
parents: 10847
diff changeset
44 stream->destroy(stream);
16236
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
45 if (array_is_created(&stream->destroy_callbacks)) {
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
46 array_foreach(&stream->destroy_callbacks, dc)
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
47 dc->callback(dc->context);
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
48 array_free(&stream->destroy_callbacks);
81d87e43e167 istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents: 16020
diff changeset
49 }
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50
16772
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
51 i_free(stream->error);
10847
5f16e488e7f6 i/ostreams can now have a name (e.g. file path).
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
52 i_free(stream->name);
6142
6c0bfc35af03 Removed memory pool parameter from iostreams. Default pool was almost always
Timo Sirainen <tss@iki.fi>
parents: 2421
diff changeset
53 i_free(stream);
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 }
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55
16020
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
56 void io_stream_close(struct iostream_private *stream, bool close_parent)
764
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 {
16020
6cabb95d32ec iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
58 stream->close(stream, close_parent);
764
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
6415
b0096861c390 Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents: 6142
diff changeset
61 void io_stream_set_max_buffer_size(struct iostream_private *stream,
b0096861c390 Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents: 6142
diff changeset
62 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
63 {
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 stream->set_max_buffer_size(stream, max_size);
f57c52738f90 Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 }
16772
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
66
18164
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
67 void io_stream_add_destroy_callback(struct iostream_private *stream,
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
68 void (*callback)(void *), void *context)
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
69 {
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
70 struct iostream_destroy_callback *dc;
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
71
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
72 if (!array_is_created(&stream->destroy_callbacks))
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
73 i_array_init(&stream->destroy_callbacks, 2);
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
74 dc = array_append_space(&stream->destroy_callbacks);
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
75 dc->callback = callback;
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
76 dc->context = context;
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
77 }
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
78
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
79 void io_stream_remove_destroy_callback(struct iostream_private *stream,
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
80 void (*callback)(void *))
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
81 {
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
82 const struct iostream_destroy_callback *dcs;
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
83 unsigned int i, count;
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
84
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
85 dcs = array_get(&stream->destroy_callbacks, &count);
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
86 for (i = 0; i < count; i++) {
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
87 if (dcs[i].callback == callback) {
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
88 array_delete(&stream->destroy_callbacks, i, 1);
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
89 return;
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
90 }
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
91 }
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
92 i_unreached();
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
93 }
4723cecff76c lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
94
16772
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
95 void io_stream_set_error(struct iostream_private *stream,
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
96 const char *fmt, ...)
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
97 {
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
98 va_list args;
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
99
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
100 va_start(args, fmt);
16813
a919c43ab91b lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents: 16772
diff changeset
101 io_stream_set_verror(stream, fmt, args);
a919c43ab91b lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents: 16772
diff changeset
102 va_end(args);
a919c43ab91b lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents: 16772
diff changeset
103 }
a919c43ab91b lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents: 16772
diff changeset
104
a919c43ab91b lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents: 16772
diff changeset
105 void io_stream_set_verror(struct iostream_private *stream,
a919c43ab91b lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents: 16772
diff changeset
106 const char *fmt, va_list args)
a919c43ab91b lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents: 16772
diff changeset
107 {
22606
e154812ec781 lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
108 /* one of the parameters may be the old stream->error, so don't free
e154812ec781 lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
109 it before the new error is created. */
e154812ec781 lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
110 char *error = i_strdup_vprintf(fmt, args);
16772
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
111 i_free(stream->error);
22606
e154812ec781 lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
112 stream->error = error;
16772
e35be66003e2 iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents: 16236
diff changeset
113 }
18989
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
114
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
115 const char *io_stream_get_disconnect_reason(struct istream *input,
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
116 struct ostream *output)
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
117 {
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
118 const char *errstr;
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
119
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
120 if (input != NULL && input->stream_errno != 0) {
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
121 errno = input->stream_errno;
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
122 errstr = i_stream_get_error(input);
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
123 } else if (output != NULL && output->stream_errno != 0) {
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
124 errno = output->stream_errno;
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
125 errstr = o_stream_get_error(output);
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
126 } else {
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
127 errno = 0;
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
128 errstr = "";
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
129 }
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
130
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
131 if (errno == 0 || errno == EPIPE)
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
132 return "Connection closed";
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
133 else
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
134 return t_strdup_printf("Connection closed: %s", errstr);
ca2f5d3575b3 lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents: 18164
diff changeset
135 }