Check in Daniel Stutzbach's _fileio.c and test_fileio.py
(see SF#1671314) with small tweaks.
The io module now uses this instead of its own implementation
of the FileIO class, if it can import _fileio.
diff --git a/Lib/io.py b/Lib/io.py
index db0ba7e..4c1912e 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -177,7 +177,7 @@
raise IOError(".fileno() not supported")
-class FileIO(RawIOBase):
+class _PyFileIO(RawIOBase):
"""Raw I/O implementation for OS files."""
@@ -243,6 +243,18 @@
return self._fd
+try:
+ import _fileio
+except ImportError:
+ # Let's use the Python version
+ FileIO = _PyFileIO
+else:
+ # Create a trivial subclass with the proper inheritance structure
+ class FileIO(_fileio._FileIO, RawIOBase):
+ """Raw I/O implementation for OS files."""
+ # XXX More docs
+
+
class SocketIO(RawIOBase):
"""Raw I/O implementation for stream sockets."""