[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