[Python-checkins] python/dist/src/Objects fileobject.c,2.180,2.181
loewis at users.sourceforge.net
loewis at users.sourceforge.net
Thu Sep 4 13:01:48 EDT 2003
Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv5789/Objects
Modified Files:
fileobject.c
Log Message:
Patch #788249: Pass an explicit buffer to setvbuf in PyFile_SetBufSize().
Fixes #603724. Will backport to 2.3.
Index: fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.180
retrieving revision 2.181
diff -C2 -d -r2.180 -r2.181
*** fileobject.c 15 Aug 2003 20:05:45 -0000 2.180
--- fileobject.c 4 Sep 2003 19:01:46 -0000 2.181
***************
*** 284,289 ****
PyFile_SetBufSize(PyObject *f, int bufsize)
{
if (bufsize >= 0) {
- #ifdef HAVE_SETVBUF
int type;
switch (bufsize) {
--- 284,289 ----
PyFile_SetBufSize(PyObject *f, int bufsize)
{
+ PyFileObject *file = (PyFileObject *)f;
if (bufsize >= 0) {
int type;
switch (bufsize) {
***************
*** 291,306 ****
type = _IONBF;
break;
case 1:
type = _IOLBF;
bufsize = BUFSIZ;
break;
default:
type = _IOFBF;
}
! 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 */
}
--- 291,318 ----
type = _IONBF;
break;
+ #ifdef HAVE_SETVBUF
case 1:
type = _IOLBF;
bufsize = BUFSIZ;
break;
+ #endif
default:
type = _IOFBF;
+ #ifndef HAVE_SETVBUF
+ bufsize = BUFSIZ;
+ #endif
+ break;
}
! fflush(file->f_fp);
! if (type == _IONBF) {
! PyMem_Free(file->f_setbuf);
! file->f_setbuf = NULL;
! } else {
! file->f_setbuf = PyMem_Realloc(file->f_setbuf, bufsize);
! }
! #ifdef HAVE_SETVBUF
! setvbuf(file->f_fp, file->f_setbuf, type, bufsize);
#else /* !HAVE_SETVBUF */
! setbuf(file->f_fp, file->f_setbuf);
#endif /* !HAVE_SETVBUF */
}
***************
*** 377,380 ****
--- 389,393 ----
{
int sts = 0;
+ PyMem_Free(f->f_setbuf);
if (f->f_fp != NULL) {
if (f->f_close != NULL) {
***************
*** 1929,1932 ****
--- 1942,1946 ----
if (open_the_file(foself, name, mode) == NULL)
goto Error;
+ foself->f_setbuf = NULL;
PyFile_SetBufSize(self, bufsize);
goto Done;
More information about the Python-checkins
mailing list