[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