[Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.97,2.98
Guido van Rossum
python-dev@python.org
Sun, 07 Jan 2001 12:51:41 -0800
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv17414
Modified Files:
fileobject.c
Log Message:
Tim noticed that I had botched get_line_raw(). Looking again, I
realized that this behavior is already present in PyFile_GetLine(),
which is the only place that needs it. A little refactoring of that
function made get_line_raw() redundant.
Index: fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.97
retrieving revision 2.98
diff -C2 -r2.97 -r2.98
*** fileobject.c 2001/01/05 14:43:05 2.97
--- fileobject.c 2001/01/07 20:51:39 2.98
***************
*** 640,644 ****
> 0: max length;
= 0: read arbitrary line;
! < 0: illegal (use get_line_raw() instead)
*/
--- 640,644 ----
> 0: max length;
= 0: read arbitrary line;
! < 0: invalid
*/
***************
*** 710,732 ****
}
- /* Internal routine to get a line for raw_input():
- strip trailing '\n', raise EOFError if EOF reached immediately
- */
-
- static PyObject *
- get_line_raw(PyFileObject *f)
- {
- PyObject *line;
-
- line = get_line(f, 0);
- if (line == NULL || PyString_GET_SIZE(line) > 0)
- return line;
- else {
- Py_DECREF(line);
- PyErr_SetString(PyExc_EOFError, "EOF when reading a line");
- return NULL;
- }
- }
-
/* External C interface */
--- 710,713 ----
***************
*** 734,745 ****
PyFile_GetLine(PyObject *f, int n)
{
if (f == NULL) {
PyErr_BadInternalCall();
return NULL;
}
! if (!PyFile_Check(f)) {
PyObject *reader;
PyObject *args;
! PyObject *result;
reader = PyObject_GetAttrString(f, "readline");
if (reader == NULL)
--- 715,734 ----
PyFile_GetLine(PyObject *f, int n)
{
+ PyObject *result;
+
if (f == NULL) {
PyErr_BadInternalCall();
return NULL;
}
!
! if (PyFile_Check(f)) {
! if (((PyFileObject*)f)->f_fp == NULL)
! return err_closed();
! result = get_line((PyFileObject *)f, n);
! }
! else {
PyObject *reader;
PyObject *args;
!
reader = PyObject_GetAttrString(f, "readline");
if (reader == NULL)
***************
*** 761,794 ****
PyErr_SetString(PyExc_TypeError,
"object.readline() returned non-string");
}
! if (n < 0 && result != NULL) {
! char *s = PyString_AsString(result);
! int len = PyString_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)
! _PyString_Resize(&result, len-1);
! else {
! PyObject *v;
! v = PyString_FromStringAndSize(s,
! len-1);
! Py_DECREF(result);
! result = v;
! }
}
}
- return result;
}
! if (((PyFileObject*)f)->f_fp == NULL)
! return err_closed();
! if (n < 0)
! return get_line_raw((PyFileObject *)f);
! else
! return get_line((PyFileObject *)f, n);
}
--- 750,777 ----
PyErr_SetString(PyExc_TypeError,
"object.readline() returned non-string");
+ }
+ }
+
+ if (n < 0 && result != NULL && PyString_Check(result)) {
+ char *s = PyString_AS_STRING(result);
+ int len = PyString_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)
! _PyString_Resize(&result, len-1);
! else {
! PyObject *v;
! v = PyString_FromStringAndSize(s, len-1);
Py_DECREF(result);
! result = v;
}
}
}
! return result;
}