[dovecot-cvs] dovecot/src/lib ostream-file.c,1.11,1.12
cras at procontrol.fi
cras at procontrol.fi
Thu Feb 20 01:35:11 EET 2003
Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv26627/lib
Modified Files:
ostream-file.c
Log Message:
ostream: get initial offset. flush buffer before seeking.
Index: ostream-file.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/ostream-file.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- ostream-file.c 19 Feb 2003 21:31:02 -0000 1.11
+++ ostream-file.c 19 Feb 2003 23:35:09 -0000 1.12
@@ -220,7 +220,6 @@
update_iovec(iov, iov_size, ret);
update_buffer(fstream, ret);
- fstream->ostream.ostream.offset += ret;
return ret;
}
@@ -362,6 +361,9 @@
return -1;
}
+ if (buffer_flush(fstream) < 0)
+ return -1;
+
ret = lseek(fstream->fd, (off_t)offset, SEEK_SET);
if (ret < 0) {
stream->ostream.stream_errno = errno;
@@ -501,11 +503,14 @@
/* send it blocking */
if (o_stream_send_blocking(fstream, data, size) < 0)
return -1;
- return (ssize_t)size;
+ ret = (ssize_t)size;
} else {
/* buffer it, at least partly */
- return (ssize_t)o_stream_add(fstream, data, size);
+ ret = (ssize_t)o_stream_add(fstream, data, size);
}
+
+ stream->ostream.offset += ret;
+ return ret;
}
static off_t io_stream_sendfile(struct _ostream *outstream,
@@ -619,6 +624,7 @@
/* error */
return -1;
}
+ outstream->ostream.offset += ret;
if (ret == 0 && !STREAM_IS_BLOCKING(foutstream)) {
/* don't block */
@@ -801,6 +807,8 @@
int priority, int autoclose_fd)
{
struct file_ostream *fstream;
+ struct ostream *ostream;
+ off_t offset;
fstream = p_new(pool, struct file_ostream, 1);
fstream->fd = fd;
@@ -820,5 +828,10 @@
fstream->ostream.send = _send;
fstream->ostream.send_istream = _send_istream;
- return _o_stream_create(&fstream->ostream, pool);
+ ostream = _o_stream_create(&fstream->ostream, pool);
+
+ offset = lseek(fd, 0, SEEK_CUR);
+ if (offset >= 0)
+ ostream->offset = offset;
+ return ostream;
}
More information about the dovecot-cvs
mailing list