Index: fileobject.c =================================================================== RCS file: /projects/cvsroot/python/dist/src/Objects/fileobject.c,v retrieving revision 2.53 retrieving revision 2.57 diff -c -r2.53 -r2.57 *** old/Objects/fileobject.c 1997/11/07 19:20:34 2.53 --- Objects/fileobject.c 1998/03/18 17:59:20 2.57 *************** *** 165,171 **** } setvbuf(((PyFileObject *)f)->f_fp, (char *)NULL, type, bufsize); ! #endif /* HAVE_SETVBUF */ } } --- 165,174 ---- } setvbuf(((PyFileObject *)f)->f_fp, (char *)NULL, type, bufsize); ! #else /* !HAVE_SETVBUF */ ! if (bufsize <= 1) ! setbuf(((PyFileObject *)f)->f_fp, (char *)NULL); ! #endif /* !HAVE_SETVBUF */ } } *************** *** 406,422 **** size_t currentsize; { #ifdef HAVE_FSTAT - #ifndef SEEK_CUR - #define SEEK_CUR 1 - #endif long pos, end; struct stat st; if (fstat(fileno(f->f_fp), &st) == 0) { end = st.st_size; ! pos = lseek(fileno(f->f_fp), 0L, SEEK_CUR); if (end > pos && pos >= 0) ! return end - pos + BUFSIZ; ! /* Add BUFSIZ to allow for stdio buffered data */ } #endif if (currentsize > SMALLCHUNK) { --- 409,422 ---- size_t currentsize; { #ifdef HAVE_FSTAT long pos, end; struct stat st; if (fstat(fileno(f->f_fp), &st) == 0) { end = st.st_size; ! pos = ftell(f->f_fp); if (end > pos && pos >= 0) ! return end - pos + 1; ! /* Add 1 so if the file were to grow we'd notice. */ } #endif if (currentsize > SMALLCHUNK) { *************** *** 469,475 **** if (bytesread < buffersize) break; if (bytesrequested < 0) { ! buffersize = new_buffersize(f, buffersize); if (_PyString_Resize(&v, buffersize) < 0) return NULL; } --- 469,475 ---- if (bytesread < buffersize) break; if (bytesrequested < 0) { ! buffersize = bytesread + new_buffersize(f, buffersize); if (_PyString_Resize(&v, buffersize) < 0) return NULL; } *************** *** 695,701 **** Py_END_ALLOW_THREADS if (nread == 0) { sizehint = 0; ! if (nread == 0) break; PyErr_SetFromErrno(PyExc_IOError); clearerr(f->f_fp); --- 695,701 ---- Py_END_ALLOW_THREADS if (nread == 0) { sizehint = 0; ! if (!ferror(f->f_fp)) break; PyErr_SetFromErrno(PyExc_IOError); clearerr(f->f_fp);