[Python-checkins] closes bpo-45479: Degunkify Py_UniversalNewlineFgets. (GH-28965)
benjaminp
webhook-mailer at python.org
Fri Oct 15 00:29:01 EDT 2021
https://github.com/python/cpython/commit/160c38df7fc7ba22dc687879c387bf643ffc3398
commit: 160c38df7fc7ba22dc687879c387bf643ffc3398
branch: main
author: Benjamin Peterson <benjamin at python.org>
committer: benjaminp <benjamin at locrian.net>
date: 2021-10-14T21:28:52-07:00
summary:
closes bpo-45479: Degunkify Py_UniversalNewlineFgets. (GH-28965)
Remove dead variables and control flow.
files:
M Objects/fileobject.c
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index dc600c6d09a48..8eb62490c452b 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -239,13 +239,7 @@ _PyLong_FileDescriptor_Converter(PyObject *o, void *ptr)
** Py_UniversalNewlineFgets is an fgets variation that understands
** all of \r, \n and \r\n conventions.
** The stream should be opened in binary mode.
-** If fobj is NULL the routine always does newline conversion, and
-** it may peek one char ahead to gobble the second char in \r\n.
-** If fobj is non-NULL it must be a PyFileObject. In this case there
-** is no readahead but in stead a flag is used to skip a following
-** \n on the next read. Also, if the file is open in binary mode
-** the whole conversion is skipped. Finally, the routine keeps track of
-** the different types of newlines seen.
+** The fobj parameter exists solely for legacy reasons and must be NULL.
** Note that we need no error handling: fgets() treats error and eof
** identically.
*/
@@ -254,7 +248,6 @@ Py_UniversalNewlineFgets(char *buf, int n, FILE *stream, PyObject *fobj)
{
char *p = buf;
int c;
- int newlinetypes = 0;
int skipnextlf = 0;
if (fobj) {
@@ -262,24 +255,15 @@ Py_UniversalNewlineFgets(char *buf, int n, FILE *stream, PyObject *fobj)
return NULL;
}
FLOCKFILE(stream);
- c = 'x'; /* Shut up gcc warning */
while (--n > 0 && (c = GETC(stream)) != EOF ) {
- if (skipnextlf ) {
+ if (skipnextlf) {
skipnextlf = 0;
if (c == '\n') {
/* Seeing a \n here with skipnextlf true
** means we saw a \r before.
*/
- newlinetypes |= NEWLINE_CRLF;
c = GETC(stream);
if (c == EOF) break;
- } else {
- /*
- ** Note that c == EOF also brings us here,
- ** so we're okay if the last char in the file
- ** is a CR.
- */
- newlinetypes |= NEWLINE_CR;
}
}
if (c == '\r') {
@@ -289,26 +273,15 @@ Py_UniversalNewlineFgets(char *buf, int n, FILE *stream, PyObject *fobj)
*/
skipnextlf = 1;
c = '\n';
- } else if ( c == '\n') {
- newlinetypes |= NEWLINE_LF;
}
*p++ = c;
if (c == '\n') break;
}
- /* if ( c == EOF && skipnextlf )
- newlinetypes |= NEWLINE_CR; */
FUNLOCKFILE(stream);
*p = '\0';
- if ( skipnextlf ) {
- /* If we have no file object we cannot save the
- ** skipnextlf flag. We have to readahead, which
- ** will cause a pause if we're reading from an
- ** interactive stream, but that is very unlikely
- ** unless we're doing something silly like
- ** exec(open("/dev/tty").read()).
- */
- c = GETC(stream);
- if ( c != '\n' )
+ if (skipnextlf) {
+ int c = GETC(stream);
+ if (c != '\n')
ungetc(c, stream);
}
if (p == buf)
More information about the Python-checkins
mailing list