[dovecot-cvs]
dovecot/src/lib istream-file.c,1.12,1.13 istream-mmap.c,1.6,1.7
istream.c,1.12,1.13 istream.h,1.7,1.8 ostream-file.c,1.22,1.23
cras at procontrol.fi
cras at procontrol.fi
Wed Nov 5 10:42:15 EET 2003
- Previous message: [dovecot-cvs] dovecot/src/lib-index/mbox mbox-rewrite.c,1.66,1.67
mbox-sync-full.c,1.19,1.20
- Next message: [dovecot-cvs] dovecot/src/lib-index/mbox mbox-append.c,1.44,1.45
mbox-index.c,1.83,1.84 mbox-rewrite.c,1.67,1.68
mbox-sync-full.c,1.20,1.21
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv9737/lib
Modified Files:
istream-file.c istream-mmap.c istream.c istream.h
ostream-file.c
Log Message:
Added istream->eof. istream->v_size is now set to 0 with files.
Index: istream-file.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream-file.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- istream-file.c 29 Oct 2003 14:54:03 -0000 1.12
+++ istream-file.c 5 Nov 2003 08:42:12 -0000 1.13
@@ -137,6 +137,7 @@
stream->istream.v_offset + fstream->skip_left;
if (read_limit <= stream->pos - stream->skip) {
/* virtual limit reached == EOF */
+ stream->istream.eof = TRUE;
return -1;
}
@@ -170,6 +171,7 @@
if (ret == 0) {
/* EOF */
stream->istream.stream_errno = 0;
+ stream->istream.eof = TRUE;
return -1;
}
@@ -177,6 +179,7 @@
if (errno == ECONNRESET || errno == ETIMEDOUT) {
/* treat as disconnection */
stream->istream.stream_errno = 0;
+ stream->istream.eof = TRUE;
return -1;
}
@@ -252,11 +255,8 @@
fstream->istream.seek = _seek;
/* get size of fd if it's a file */
- if (fstat(fd, &st) < 0 || !S_ISREG(st.st_mode))
- st.st_size = 0;
- else
+ if (fstat(fd, &st) == 0 && S_ISREG(st.st_mode))
fstream->file = TRUE;
- return _i_stream_create(&fstream->istream, pool, fd, 0,
- (uoff_t)st.st_size);
+ return _i_stream_create(&fstream->istream, pool, fd, 0, 0);
}
Index: istream-mmap.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream-mmap.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- istream-mmap.c 26 Aug 2003 21:18:16 -0000 1.6
+++ istream-mmap.c 5 Nov 2003 08:42:12 -0000 1.7
@@ -100,6 +100,7 @@
(uoff_t)mstream->mmap_offset + stream->pos) {
/* end of file */
stream->istream.stream_errno = 0;
+ stream->istream.eof = TRUE;
return -1;
}
Index: istream.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- istream.c 29 Oct 2003 14:53:55 -0000 1.12
+++ istream.c 5 Nov 2003 08:42:12 -0000 1.13
@@ -69,6 +69,7 @@
i_assert(stream->v_size == 0 || v_offset <= stream->v_size);
+ stream->eof = FALSE;
if (_stream->high_pos != 0) {
_stream->pos = _stream->high_pos;
_stream->high_pos = 0;
@@ -100,6 +101,7 @@
return -1;
}
+ stream->eof = FALSE;
return _stream->read(_stream);
}
@@ -136,11 +138,12 @@
{
struct _istream *_stream = stream->real_stream;
- i_assert(v_offset <= stream->v_size);
+ i_assert(stream->v_size == 0 || v_offset <= stream->v_size);
if (stream->closed)
return;
+ stream->eof = FALSE;
_stream->high_pos = 0;
_stream->seek(_stream, v_offset);
}
Index: istream.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- istream.h 10 Mar 2003 00:36:08 -0000 1.7
+++ istream.h 5 Nov 2003 08:42:12 -0000 1.8
@@ -8,6 +8,7 @@
int stream_errno;
unsigned int mmaped:1; /* be careful when copying data */
unsigned int closed:1;
+ unsigned int eof:1;
struct _istream *real_stream;
};
Index: ostream-file.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/ostream-file.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- ostream-file.c 21 Oct 2003 05:27:57 -0000 1.22
+++ ostream-file.c 5 Nov 2003 08:42:12 -0000 1.23
@@ -689,7 +689,8 @@
out_offset = outstream->ostream.offset +
(instream->v_limit - instream->v_offset);
- i_assert(out_offset <= instream->start_offset + instream->v_size);
+ i_assert(instream->v_size == 0 ||
+ out_offset <= instream->start_offset + instream->v_size);
while (in_offset > in_start_offset) {
if (in_offset - in_start_offset <= buffer_size)
@@ -756,12 +757,13 @@
return (off_t) (instream->v_limit - in_start_offset);
}
-static off_t _send_istream(struct _ostream *outstream, struct istream *instream)
+static off_t send_istream_fd(struct _ostream *outstream,
+ struct istream *instream, int in_fd)
{
struct file_ostream *foutstream = (struct file_ostream *) outstream;
uoff_t old_limit;
off_t ret;
- int in_fd, overlapping;
+ int overlapping;
i_assert(instream->v_limit <= OFF_T_MAX);
i_assert(instream->v_offset <= instream->v_limit);
@@ -771,7 +773,6 @@
if (instream->v_offset == instream->v_limit)
return 0;
- in_fd = i_stream_get_fd(instream);
if (in_fd != foutstream->fd)
overlapping = 0;
else {
@@ -808,6 +809,29 @@
old_limit = instream->v_limit;
ret = io_stream_copy_backwards(outstream, instream);
i_stream_set_read_limit(instream, old_limit);
+ return ret;
+ }
+}
+
+static off_t _send_istream(struct _ostream *outstream, struct istream *instream)
+{
+ struct stat st;
+ int in_fd, ret;
+
+ in_fd = i_stream_get_fd(instream);
+ if (fstat(in_fd, &st) < 0) {
+ outstream->ostream.stream_errno = errno;
+ return -1;
+ }
+
+ if (instream->v_limit != 0)
+ return send_istream_fd(outstream, instream, in_fd);
+ else {
+ /* easier this way so we know exactly how much data we're
+ moving */
+ i_stream_set_read_limit(instream, st.st_size);
+ ret = send_istream_fd(outstream, instream, in_fd);
+ i_stream_set_read_limit(instream, 0);
return ret;
}
}
- Previous message: [dovecot-cvs] dovecot/src/lib-index/mbox mbox-rewrite.c,1.66,1.67
mbox-sync-full.c,1.19,1.20
- Next message: [dovecot-cvs] dovecot/src/lib-index/mbox mbox-append.c,1.44,1.45
mbox-index.c,1.83,1.84 mbox-rewrite.c,1.67,1.68
mbox-sync-full.c,1.20,1.21
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list