[Python-checkins] python/dist/src/Objects fileobject.c,2.174,2.175

loewis@users.sourceforge.net loewis@users.sourceforge.net
Fri, 03 Jan 2003 11:16:18 -0800


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

Modified Files:
	fileobject.c 
Log Message:
Allow PyFile_GetLine() to return Unicode objects. Fixes #660165.


Index: fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.174
retrieving revision 2.175
diff -C2 -d -r2.174 -r2.175
*** fileobject.c	29 Dec 2002 16:33:11 -0000	2.174
--- fileobject.c	3 Jan 2003 19:16:14 -0000	2.175
***************
*** 1213,1217 ****
  		Py_DECREF(reader);
  		Py_DECREF(args);
! 		if (result != NULL && !PyString_Check(result)) {
  			Py_DECREF(result);
  			result = NULL;
--- 1213,1218 ----
  		Py_DECREF(reader);
  		Py_DECREF(args);
! 		if (result != NULL && !PyString_Check(result) &&
! 		    !PyUnicode_Check(result)) {
  			Py_DECREF(result);
  			result = NULL;
***************
*** 1241,1244 ****
--- 1242,1267 ----
  		}
  	}
+ #ifdef Py_USING_UNICODE
+ 	if (n < 0 && result != NULL && PyUnicode_Check(result)) {
+ 		Py_UNICODE *s = PyUnicode_AS_UNICODE(result);
+ 		int len = PyUnicode_GET_SIZE(result);
+ 		if (len == 0) {
+ 			Py_DECREF(result);
+ 			result = NULL;
+ 			PyErr_SetString(PyExc_EOFError,
+ 					"EOF when reading a line");
+ 		}
+ 		else if (s[len-1] == '\n') {
+ 			if (result->ob_refcnt == 1)
+ 				PyUnicode_Resize(&result, len-1);
+ 			else {
+ 				PyObject *v;
+ 				v = PyUnicode_FromUnicode(s, len-1);
+ 				Py_DECREF(result);
+ 				result = v;
+ 			}
+ 		}
+ 	}
+ #endif
  	return result;
  }