wrowe 01/08/27 18:56:09
Modified: file_io/win32 readwrite.c seek.c
Log:
Found a very ugly reaction to using apr_file_seek(APR_CUR, -value) in
conjuction with buffered reads. Thank you for toggling that case Jeff,
so I could shoot out this bug ;)
Revision Changes Path
1.61 +9 -6 apr/file_io/win32/readwrite.c
Index: readwrite.c
===================================================================
RCS file: /home/cvs/apr/file_io/win32/readwrite.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- readwrite.c 2001/06/20 00:56:02 1.60
+++ readwrite.c 2001/08/28 01:56:09 1.61
@@ -159,7 +159,7 @@
APR_DECLARE(apr_status_t) apr_file_read(apr_file_t *thefile, void *buf,
apr_size_t *len)
{
- apr_size_t rv;
+ apr_status_t rv;
DWORD bytes_read = 0;
if (*len <= 0) {
@@ -196,16 +196,19 @@
rv = 0;
while (rv == 0 && size > 0) {
if (thefile->bufpos >= thefile->dataRead) {
+ apr_size_t read;
rv = read_with_timeout(thefile, thefile->buffer,
- APR_FILE_BUFSIZE, &thefile->dataRead);
- if (thefile->dataRead == 0) {
+ APR_FILE_BUFSIZE, &read);
+ if (read == 0) {
if (rv == APR_EOF)
thefile->eof_hit = TRUE;
break;
}
-
- thefile->filePtr += thefile->dataRead;
- thefile->bufpos = 0;
+ else {
+ thefile->dataRead = read;
+ thefile->filePtr += thefile->dataRead;
+ thefile->bufpos = 0;
+ }
}
blocksize = size > thefile->dataRead - thefile->bufpos ?
thefile->dataRead - thefile->bufpos : size;
1.20 +1 -1 apr/file_io/win32/seek.c
Index: seek.c
===================================================================
RCS file: /home/cvs/apr/file_io/win32/seek.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- seek.c 2001/07/31 19:51:34 1.19
+++ seek.c 2001/08/28 01:56:09 1.20
@@ -82,7 +82,7 @@
else
rc = APR_SUCCESS;
if (rc == APR_SUCCESS)
- thefile->bufpos = thefile->dataRead = 0;
+ thefile->eof_hit = thefile->bufpos = thefile->dataRead = 0;
}
return rc;