[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;
}