[Python-checkins] python/dist/src/Objects fileobject.c, 2.179, 2.179.8.1

loewis at users.sourceforge.net loewis at users.sourceforge.net
Thu Sep 4 13:02:22 EDT 2003


Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv6327/Objects

Modified Files:
      Tag: release23-maint
	fileobject.c 
Log Message:
Patch #788249: Pass an explicit buffer to setvbuf in PyFile_SetBufSize().
Fixes #603724.


Index: fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.179
retrieving revision 2.179.8.1
diff -C2 -d -r2.179 -r2.179.8.1
*** fileobject.c	18 May 2003 12:56:25 -0000	2.179
--- fileobject.c	4 Sep 2003 19:02:20 -0000	2.179.8.1
***************
*** 283,288 ****
  PyFile_SetBufSize(PyObject *f, int bufsize)
  {
  	if (bufsize >= 0) {
- #ifdef HAVE_SETVBUF
  		int type;
  		switch (bufsize) {
--- 283,288 ----
  PyFile_SetBufSize(PyObject *f, int bufsize)
  {
+ 	PyFileObject *file = (PyFileObject *)f;
  	if (bufsize >= 0) {
  		int type;
  		switch (bufsize) {
***************
*** 290,305 ****
  			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 */
  	}
--- 290,317 ----
  			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 */
  	}
***************
*** 376,379 ****
--- 388,392 ----
  {
  	int sts = 0;
+ 	PyMem_Free(f->f_setbuf);
  	if (f->f_fp != NULL) {
  		if (f->f_close != NULL) {
***************
*** 1928,1931 ****
--- 1941,1945 ----
  	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