istream-file.c revision 03915cfec4eb1b5a65e5b6b676c8f4151bc80351
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen/* Copyright (c) 2002-2017 Dovecot authors, see the included COPYING file */
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen/* @UNSAFE: whole file */
01230de017cd273de41143d88e9c18df1243ae8aTimo Sirainenvoid i_stream_file_close(struct iostream_private *stream,
047c00cd3f7f403672f81569413669238df8c15aTimo Sirainen struct file_istream *fstream = (struct file_istream *)stream;
047c00cd3f7f403672f81569413669238df8c15aTimo Sirainen struct istream_private *_stream = (struct istream_private *)stream;
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen if (fstream->autoclose_fd && _stream->fd != -1) {
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenstatic int i_stream_file_open(struct istream_private *stream)
89237470342ea6d4bbdf4cff9764037cfb3f6f45Timo Sirainen const char *path = i_stream_get_name(&stream->istream);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenssize_t i_stream_file_read(struct istream_private *stream)
a3fe8c0c54d87822f4b4f8f0d10caac611861b2bTimo Sirainen struct file_istream *fstream = (struct file_istream *) stream;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen offset = stream->istream.v_offset + (stream->pos - stream->skip);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen ret = pread(stream->fd, stream->w_buffer + stream->pos,
3f603ef00e35fca21605afa0ad8d76e94fee2b96Timo Sirainen /* don't try to read() again. EOF from keyboard (^D)
3f603ef00e35fca21605afa0ad8d76e94fee2b96Timo Sirainen requires this to work right. */
86791365b10f45982c88e70f2eb94fd6c3fea151Timo Sirainen ret = read(stream->fd, stream->w_buffer + stream->pos,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* if we get EBADF for a valid fd, it means something's
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen really wrong and we'd better just crash. */
return ret;
struct istream *
bool is_file;
if (is_file) {
return input;
return input;
return input;