Fix for bug 4362 "FileIO object in io module";  Patch by amaury.forgeotdarc.
diff --git a/Lib/io.py b/Lib/io.py
index 8e65a10..041e8eb 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -239,8 +239,6 @@
         raise ValueError("invalid buffering size")
     if buffering == 0:
         if binary:
-            raw._name = file
-            raw._mode = mode
             return raw
         raise ValueError("can't have unbuffered text I/O")
     if updating:
@@ -252,11 +250,8 @@
     else:
         raise ValueError("unknown mode: %r" % mode)
     if binary:
-        buffer.name = file
-        buffer.mode = mode
         return buffer
     text = TextIOWrapper(buffer, encoding, errors, newline, line_buffering)
-    text.name = file
     text.mode = mode
     return text
 
@@ -616,6 +611,10 @@
     # that _fileio._FileIO inherits from io.RawIOBase (which would be hard
     # to do since _fileio.c is written in C).
 
+    def __init__(self, name, mode="r", closefd=True):
+        _fileio._FileIO.__init__(self, name, mode, closefd)
+        self._name = name
+
     def close(self):
         _fileio._FileIO.close(self)
         RawIOBase.close(self)
@@ -624,11 +623,6 @@
     def name(self):
         return self._name
 
-    # XXX(gb): _FileIO already has a mode property
-    @property
-    def mode(self):
-        return self._mode
-
 
 class BufferedIOBase(IOBase):
 
@@ -762,6 +756,14 @@
     def closed(self):
         return self.raw.closed
 
+    @property
+    def name(self):
+        return self.raw.name
+
+    @property
+    def mode(self):
+        return self.raw.mode
+
     ### Lower-level APIs ###
 
     def fileno(self):
@@ -1464,6 +1466,10 @@
     def closed(self):
         return self.buffer.closed
 
+    @property
+    def name(self):
+        return self.buffer.name
+
     def fileno(self):
         return self.buffer.fileno()