istream-file.c revision 8edc373587d75f8040e3c4416e50638aa2a32188
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2002-2008 Dovecot authors, see the included COPYING file */
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainen/* @UNSAFE: whole file */
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainenstatic void i_stream_file_close(struct iostream_private *stream)
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen struct file_istream *fstream = (struct file_istream *)stream;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen struct istream_private *_stream = (struct istream_private *)stream;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen if (fstream->autoclose_fd && _stream->fd != -1) {
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainenstatic void i_stream_file_destroy(struct iostream_private *stream)
03f4c5f3502801f5b318f464cc75313a88558805Timo Sirainen struct istream_private *_stream = (struct istream_private *)stream;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainenstatic ssize_t i_stream_file_read(struct istream_private *stream)
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen struct file_istream *fstream = (struct file_istream *) stream;
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen if (!i_stream_get_buffer_space(stream, 1, &size))
39ed514f9d401b3cb589595c6a2f532050254d77Timo Sirainen ret = pread(stream->fd, stream->w_buffer + stream->pos,
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen /* don't try to read() again. EOF from keyboard (^D)
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen requires this to work right. */
64f30df0bee5218c9a69915e796d9d1376cfbf29Timo Sirainen ret = read(stream->fd, stream->w_buffer + stream->pos,
if (ret == 0) {
ret = 0;
ret = 0;
return ret;
static const struct stat *
return NULL;
bool autoclose_fd)