istream-file.c revision 8cb72c59d5ea4e9e5f638d7ec840bb853f5a188e
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen/* Copyright (c) 2002-2010 Dovecot authors, see the included COPYING file */
08d6658a4e2ec8104cd1307f6baa75fdb07a24f8Mark Washenberger/* @UNSAFE: whole file */
16f46efe0e090fe6975acf012a61a160f4787985Andrey Paninstatic void i_stream_file_close(struct iostream_private *stream)
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen struct file_istream *fstream = (struct file_istream *)stream;
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen struct istream_private *_stream = (struct istream_private *)stream;
d1414c09cf0d58ac983054e2f4e1a1f329272dcfTimo Sirainen if (fstream->autoclose_fd && _stream->fd != -1) {
7242e1ce7803b83bc82e239ef111b47c1c72dd4bAndrey Paninstatic ssize_t i_stream_file_read(struct istream_private *stream)
d1414c09cf0d58ac983054e2f4e1a1f329272dcfTimo Sirainen struct file_istream *fstream = (struct file_istream *) stream;
d1414c09cf0d58ac983054e2f4e1a1f329272dcfTimo Sirainen if (!i_stream_get_buffer_space(stream, 1, &size))
e70d5895795732b8247ab9abb045b438e954bc46Timo Sirainen ret = pread(stream->fd, stream->w_buffer + stream->pos,
e70d5895795732b8247ab9abb045b438e954bc46Timo Sirainen /* don't try to read() again. EOF from keyboard (^D)
e70d5895795732b8247ab9abb045b438e954bc46Timo Sirainen requires this to work right. */
e70d5895795732b8247ab9abb045b438e954bc46Timo Sirainen ret = read(stream->fd, stream->w_buffer + stream->pos,
e70d5895795732b8247ab9abb045b438e954bc46Timo Sirainen } while (unlikely(ret < 0 && errno == EINTR &&
e9e2d23e1ea5a149a7d8828d2a45b9f2313c3785Timo Sirainenstatic void i_stream_file_seek(struct istream_private *stream, uoff_t v_offset,
f97cf1c086715db87094bc3d0a4fefdd80bd869cTimo Sirainen struct file_istream *fstream = (struct file_istream *) stream;
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen i_panic("stream doesn't support seeking backwards");
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen fstream->skip_left += v_offset - stream->istream.v_offset;
2c38504860da8a8de915f8e0f5f39d7e7bd00cf8Timo Sirainenstatic void i_stream_file_sync(struct istream_private *stream)
2c38504860da8a8de915f8e0f5f39d7e7bd00cf8Timo Sirainen /* can't do anything or data would be lost */
a4ac325c2802693c6b761e5a8fda961e5d7490eaTimo Sirainenstatic const struct stat *
b7c2065b3f10f9ae27787a9db5aaefbfc70d4502Timo Siraineni_stream_file_stat(struct istream_private *stream, bool exact ATTR_UNUSED)
0469ed17dafcc56589ce00960a23f4f06817dfb5Timo Sirainen struct file_istream *fstream = (struct file_istream *) stream;
return NULL;
bool autoclose_fd)