From 3603cc5fdba912602dc714aff3d5d33d56887d23 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 13 Aug 2010 13:34:52 +0000 Subject: Issue #9425: PyFile_FromFd() ignores the name argument This function is only by imp.find_module() which does return the filename in a separated variable. --- Doc/c-api/file.rst | 8 ++++++-- Objects/fileobject.c | 14 +++----------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/Doc/c-api/file.rst b/Doc/c-api/file.rst index cc851e6..0cbe070 100644 --- a/Doc/c-api/file.rst +++ b/Doc/c-api/file.rst @@ -22,8 +22,9 @@ the :mod:`io` APIs instead. Create a Python file object from the file descriptor of an already opened file *fd*. The arguments *name*, *encoding*, *errors* and *newline* can be *NULL* to use the defaults; *buffering* can be *-1* to use the - default. Return *NULL* on failure. For a more comprehensive description of - the arguments, please refer to the :func:`io.open` function documentation. + default. *name* is ignored and kept for backward compatibility. Return + *NULL* on failure. For a more comprehensive description of the arguments, + please refer to the :func:`io.open` function documentation. .. warning:: @@ -31,6 +32,9 @@ the :mod:`io` APIs instead. OS-level file descriptors can produce various issues (such as unexpected ordering of data). + .. versionchanged:: 3.2 + Ignore *name* attribute. + .. cfunction:: int PyObject_AsFileDescriptor(PyObject *p) diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 3709e00..9288e35 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -29,7 +29,7 @@ PyObject * PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, char *errors, char *newline, int closefd) { - PyObject *io, *stream, *nameobj = NULL; + PyObject *io, *stream; io = PyImport_ImportModule("io"); if (io == NULL) @@ -40,16 +40,8 @@ PyFile_FromFd(int fd, char *name, char *mode, int buffering, char *encoding, Py_DECREF(io); if (stream == NULL) return NULL; - if (name != NULL) { - nameobj = PyUnicode_DecodeFSDefault(name); - if (nameobj == NULL) - PyErr_Clear(); - else { - if (PyObject_SetAttrString(stream, "name", nameobj) < 0) - PyErr_Clear(); - Py_DECREF(nameobj); - } - } + /* ignore name attribute because the name attribute of _BufferedIOMixin + and TextIOWrapper is read only */ return stream; } -- cgit v0.12