summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-08-13 13:34:52 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-08-13 13:34:52 (GMT)
commit3603cc5fdba912602dc714aff3d5d33d56887d23 (patch)
tree8a6ca89c5b28715ff347753e8c3901996a176be4
parent1a4d12d74681d35a40474790925a8ec9c8069b4e (diff)
downloadcpython-3603cc5fdba912602dc714aff3d5d33d56887d23.zip
cpython-3603cc5fdba912602dc714aff3d5d33d56887d23.tar.gz
cpython-3603cc5fdba912602dc714aff3d5d33d56887d23.tar.bz2
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.
-rw-r--r--Doc/c-api/file.rst8
-rw-r--r--Objects/fileobject.c14
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;
}