# HG changeset patch # User Timo Sirainen # Date 1344642829 -10800 # Node ID 4bcd507e890759324973e8cd1982acc7f68b28b5 # Parent 6008a36cb36cb041ae9322957444ce39dd3dc2eb Added o_stream_get_fd(). diff -r 6008a36cb36c -r 4bcd507e8907 src/lib-compression/ostream-bzlib.c --- a/src/lib-compression/ostream-bzlib.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib-compression/ostream-bzlib.c Sat Aug 11 02:53:49 2012 +0300 @@ -217,6 +217,7 @@ zstream->zs.next_out = zstream->outbuf; zstream->zs.avail_out = sizeof(zstream->outbuf); - return o_stream_create(&zstream->ostream, output); + return o_stream_create(&zstream->ostream, output, + o_stream_get_fd(output)); } #endif diff -r 6008a36cb36c -r 4bcd507e8907 src/lib-compression/ostream-zlib.c --- a/src/lib-compression/ostream-zlib.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib-compression/ostream-zlib.c Sat Aug 11 02:53:49 2012 +0300 @@ -310,7 +310,8 @@ zstream->zs.next_out = zstream->outbuf; zstream->zs.avail_out = sizeof(zstream->outbuf); - return o_stream_create(&zstream->ostream, output); + return o_stream_create(&zstream->ostream, output, + o_stream_get_fd(output)); } struct ostream *o_stream_create_gz(struct ostream *output, int level) diff -r 6008a36cb36c -r 4bcd507e8907 src/lib-fs/ostream-cmp.c --- a/src/lib-fs/ostream-cmp.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib-fs/ostream-cmp.c Sat Aug 11 02:53:49 2012 +0300 @@ -80,7 +80,8 @@ cstream->equals = TRUE; i_stream_ref(input); - return o_stream_create(&cstream->ostream, output); + return o_stream_create(&cstream->ostream, output, + o_stream_get_fd(output)); } bool o_stream_cmp_equals(struct ostream *_output) diff -r 6008a36cb36c -r 4bcd507e8907 src/lib-ssl-iostream/ostream-openssl.c --- a/src/lib-ssl-iostream/ostream-openssl.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib-ssl-iostream/ostream-openssl.c Sat Aug 11 02:53:49 2012 +0300 @@ -256,5 +256,6 @@ o_stream_set_flush_callback(ssl_io->plain_output, plain_flush_callback, sstream); - return o_stream_create(&sstream->ostream, NULL); + return o_stream_create(&sstream->ostream, NULL, + o_stream_get_fd(ssl_io->plain_output)); } diff -r 6008a36cb36c -r 4bcd507e8907 src/lib/ostream-buffer.c --- a/src/lib/ostream-buffer.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib/ostream-buffer.c Sat Aug 11 02:53:49 2012 +0300 @@ -60,7 +60,7 @@ bstream->ostream.write_at = o_stream_buffer_write_at; bstream->buf = buf; - output = o_stream_create(&bstream->ostream, NULL); + output = o_stream_create(&bstream->ostream, NULL, -1); o_stream_set_name(output, "(buffer)"); return output; } diff -r 6008a36cb36c -r 4bcd507e8907 src/lib/ostream-file.c --- a/src/lib/ostream-file.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib/ostream-file.c Sat Aug 11 02:53:49 2012 +0300 @@ -933,7 +933,7 @@ fstream = o_stream_create_fd_common(fd, autoclose_fd); fstream->ostream.max_buffer_size = max_buffer_size; - ostream = o_stream_create(&fstream->ostream, NULL); + ostream = o_stream_create(&fstream->ostream, NULL, fd); offset = lseek(fd, 0, SEEK_CUR); if (offset >= 0) { @@ -969,7 +969,7 @@ fstream->real_offset = offset; fstream->buffer_offset = offset; - ostream = o_stream_create(&fstream->ostream, NULL); + ostream = o_stream_create(&fstream->ostream, NULL, fd); ostream->offset = offset; return ostream; } diff -r 6008a36cb36c -r 4bcd507e8907 src/lib/ostream-private.h --- a/src/lib/ostream-private.h Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib/ostream-private.h Sat Aug 11 02:53:49 2012 +0300 @@ -32,6 +32,7 @@ struct ostream *parent; /* for filter streams */ + int fd; stream_flush_callback_t *callback; void *context; @@ -41,7 +42,7 @@ }; struct ostream * -o_stream_create(struct ostream_private *_stream, struct ostream *parent) +o_stream_create(struct ostream_private *_stream, struct ostream *parent, int fd) ATTR_NULL(2); off_t io_stream_copy(struct ostream *outstream, struct istream *instream, diff -r 6008a36cb36c -r 4bcd507e8907 src/lib/ostream-rawlog.c --- a/src/lib/ostream-rawlog.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib/ostream-rawlog.c Sat Aug 11 02:53:49 2012 +0300 @@ -58,5 +58,5 @@ rstream->riostream.autoclose_fd = autoclose_fd; rstream->riostream.write_timestamp = TRUE; - return o_stream_create(&rstream->ostream, output); + return o_stream_create(&rstream->ostream, output, -1); } diff -r 6008a36cb36c -r 4bcd507e8907 src/lib/ostream.c --- a/src/lib/ostream.c Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib/ostream.c Sat Aug 11 02:53:49 2012 +0300 @@ -20,6 +20,11 @@ return stream->real_stream->iostream.name; } +int o_stream_get_fd(struct ostream *stream) +{ + return stream->real_stream->fd; +} + void o_stream_destroy(struct ostream **stream) { o_stream_close(*stream); @@ -459,8 +464,9 @@ } struct ostream * -o_stream_create(struct ostream_private *_stream, struct ostream *parent) +o_stream_create(struct ostream_private *_stream, struct ostream *parent, int fd) { + _stream->fd = fd; _stream->ostream.real_stream = _stream; if (parent != NULL) { _stream->parent = parent; diff -r 6008a36cb36c -r 4bcd507e8907 src/lib/ostream.h --- a/src/lib/ostream.h Sat Aug 11 02:16:07 2012 +0300 +++ b/src/lib/ostream.h Sat Aug 11 02:53:49 2012 +0300 @@ -42,6 +42,9 @@ /* Get output stream's name. Returns "" if stream has no name. */ const char *o_stream_get_name(struct ostream *stream); +/* Return file descriptor for stream, or -1 if none is available. */ +int o_stream_get_fd(struct ostream *stream); + /* o_stream_close() + o_stream_unref() */ void o_stream_destroy(struct ostream **stream); /* Reference counting. References start from 1, so calling o_stream_unref()