[Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.92,2.93

A.M. Kuchling python-dev@python.org
Tue, 28 Nov 2000 18:53:26 -0800


Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv19411

Modified Files:
	fileobject.c 
Log Message:
Patch #102469: Use glibc's getline() extension when reading unbounded lines


Index: fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.92
retrieving revision 2.93
diff -C2 -r2.92 -r2.93
*** fileobject.c	2000/11/13 19:48:22	2.92
--- fileobject.c	2000/11/29 02:53:22	2.93
***************
*** 646,656 ****
  get_line(PyFileObject *f, int n)
  {
! 	register FILE *fp;
  	register int c;
! 	register char *buf, *end;
  	size_t n1, n2;
  	PyObject *v;
  
! 	fp = f->f_fp;
  	n2 = n > 0 ? n : 100;
  	v = PyString_FromStringAndSize((char *)NULL, n2);
--- 646,683 ----
  get_line(PyFileObject *f, int n)
  {
! 	register FILE *fp = f->f_fp;
  	register int c;
! 	char *buf, *end;
  	size_t n1, n2;
  	PyObject *v;
  
! #ifdef HAVE_GETLINE
! 	/* Use GNU libc extension getline() for arbitrary-sized lines */
! 	if (n == 0) {
! 		size_t size = 0;
! 		buf = NULL;
! 		Py_BEGIN_ALLOW_THREADS
! 		n1 = getline(&buf, &size, fp);
! 		Py_END_ALLOW_THREADS
! 		if (n1 == -1) {
! 			clearerr(fp);
! 			if (PyErr_CheckSignals()) {
! 				return NULL;
! 			}
! 			if (n < 0 && feof(fp)) {
! 				PyErr_SetString(PyExc_EOFError,
! 						"EOF when reading a line");
! 				return NULL;
! 			}
! 			return PyString_FromStringAndSize(NULL, 0);
! 		}
! 		/* No error */
! 		
! 		v = PyString_FromStringAndSize(buf, n1);
! 		free(buf);
! 		return v;
! 	}
! #endif
! 
  	n2 = n > 0 ? n : 100;
  	v = PyString_FromStringAndSize((char *)NULL, n2);