]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Added [io]_stream_create_error_str()
authorTimo Sirainen <tss@iki.fi>
Sun, 22 Sep 2013 01:39:35 +0000 (04:39 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 22 Sep 2013 01:39:35 +0000 (04:39 +0300)
src/lib/iostream-private.h
src/lib/iostream.c
src/lib/istream.c
src/lib/istream.h
src/lib/ostream.c
src/lib/ostream.h

index 4622d095c8aa2fc2793daa2eb2416194aacd0803..5010afb40e1e74b8b6d2548813455536c830a882 100644 (file)
@@ -33,5 +33,7 @@ void io_stream_set_max_buffer_size(struct iostream_private *stream,
    Setting this error replaces the previously set error. */
 void io_stream_set_error(struct iostream_private *stream,
                         const char *fmt, ...) ATTR_FORMAT(2, 3);
+void io_stream_set_verror(struct iostream_private *stream,
+                         const char *fmt, va_list args) ATTR_FORMAT(2, 0);
 
 #endif
index 9bd83f925d10a297d8e3ff47e243bbdc9d31ad55..4c10dc2bd245b61bc83a0ba831013150a5537e2f 100644 (file)
@@ -68,7 +68,13 @@ void io_stream_set_error(struct iostream_private *stream,
        va_list args;
 
        va_start(args, fmt);
+       io_stream_set_verror(stream, fmt, args);
+       va_end(args);
+}
+
+void io_stream_set_verror(struct iostream_private *stream,
+                         const char *fmt, va_list args)
+{
        i_free(stream->error);
        stream->error = i_strdup_vprintf(fmt, args);
-       va_end(args);
 }
index 46888aa84be629c658ba280dfd2a08ed662d3d21..0154266a6a09405f6affcb1911cf32414a0889d6 100644 (file)
@@ -766,3 +766,16 @@ struct istream *i_stream_create_error(int stream_errno)
        i_stream_set_name(&stream->istream, "(error)");
        return &stream->istream;
 }
+
+struct istream *
+i_stream_create_error_str(int stream_errno, const char *fmt, ...)
+{
+       struct istream *input;
+       va_list args;
+
+       va_start(args, fmt);
+       input = i_stream_create_error(stream_errno);
+       io_stream_set_verror(&input->real_stream->iostream, fmt, args);
+       va_end(args);
+       return input;
+}
index 4bfe29568123743c4139ce030d5bd9b2be877fd3..9c9b8bc040ae321bd37edd2f4b72c13825c1c552 100644 (file)
@@ -35,6 +35,9 @@ struct istream *i_stream_create_limit(struct istream *input, uoff_t v_size);
 struct istream *i_stream_create_range(struct istream *input,
                                      uoff_t v_offset, uoff_t v_size);
 struct istream *i_stream_create_error(int stream_errno);
+struct istream *
+i_stream_create_error_str(int stream_errno, const char *fmt, ...)
+       ATTR_FORMAT(2, 3);
 
 /* Set name (e.g. path) for input stream. */
 void i_stream_set_name(struct istream *stream, const char *name);
index 05398aac706b0c8b49861c9d8738461186ff4f5f..d4a8c3b585c46a17a91f1418d1e2f8f5b5c99ec6 100644 (file)
@@ -560,6 +560,20 @@ struct ostream *o_stream_create_error(int stream_errno)
        stream->ostream.last_failed_errno = stream_errno;
 
        output = o_stream_create(stream, NULL, -1);
+       o_stream_set_no_error_handling(output, TRUE);
        o_stream_set_name(output, "(error)");
        return output;
 }
+
+struct ostream *
+o_stream_create_error_str(int stream_errno, const char *fmt, ...)
+{
+       struct ostream *output;
+       va_list args;
+
+       va_start(args, fmt);
+       output = o_stream_create_error(stream_errno);
+       io_stream_set_verror(&output->real_stream->iostream, fmt, args);
+       va_end(args);
+       return output;
+}
index 6c429e603402d7adc3a85256cafa7dbdb1fa91f2..763c3e87be88be53e2e2e7b1284e6a47d51e3692 100644 (file)
@@ -38,6 +38,9 @@ o_stream_create_fd_file(int fd, uoff_t offset, bool autoclose_fd);
 struct ostream *o_stream_create_buffer(buffer_t *buf);
 /* Create an output streams that always fails the writes. */
 struct ostream *o_stream_create_error(int stream_errno);
+struct ostream *
+o_stream_create_error_str(int stream_errno, const char *fmt, ...)
+       ATTR_FORMAT(2, 3);
 
 /* Set name (e.g. path) for output stream. */
 void o_stream_set_name(struct ostream *stream, const char *name);