aboutsummaryrefslogtreecommitdiffstats
path: root/driver.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>1996-11-04 22:56:43 +0000
committerEric S. Raymond <esr@thyrsus.com>1996-11-04 22:56:43 +0000
commit9b699b1aebb24f4f42b0c8b89a497339fc1e1499 (patch)
treeea5a8eba6dc8eefa7449e9d1a70fd340cea78595 /driver.c
parent6a4065ca0329496d53046e3895d8d536d7ac1c24 (diff)
downloadfetchmail-9b699b1aebb24f4f42b0c8b89a497339fc1e1499.tar.gz
fetchmail-9b699b1aebb24f4f42b0c8b89a497339fc1e1499.tar.bz2
fetchmail-9b699b1aebb24f4f42b0c8b89a497339fc1e1499.zip
Insert fseeks to prevent read-write lossage.
svn path=/trunk/; revision=485
Diffstat (limited to 'driver.c')
-rw-r--r--driver.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/driver.c b/driver.c
index 9eee8807..46b2a153 100644
--- a/driver.c
+++ b/driver.c
@@ -789,6 +789,14 @@ struct query *ctl; /* query control record */
lines++;
}
+ /*
+ * Required by Standard C and the Linux stdio library,
+ * which wants a seek between read and write operations on a
+ * read/write stream. Without this we got weird lossage
+ * trying to issue delete commands after reading a long message.
+ */
+ fseek(sockfp, 0L, SEEK_CUR);
+
if (ctl->mda[0])
{
/* close the delivery pipe, we'll reopen before next message */
@@ -1118,7 +1126,7 @@ va_dcl {
va_end(ap);
strcat(buf, "\r\n");
- fputs(buf, sockfp);
+ fputs(buf, sockfp); fseek(sockfp, 0L, SEEK_CUR);
if (outlevel == O_VERBOSE)
{
@@ -1160,7 +1168,7 @@ va_dcl {
va_end(ap);
strcat(buf, "\r\n");
- fputs(buf, sockfp);
+ fputs(buf, sockfp); fseek(sockfp, 0L, SEEK_CUR);
if (outlevel == O_VERBOSE)
{
char *cp;