]> granicus.if.org Git - python/commitdiff
Revert temporary commit in r79937
authorAntoine Pitrou <solipsis@pitrou.net>
Sat, 10 Apr 2010 23:32:12 +0000 (23:32 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Sat, 10 Apr 2010 23:32:12 +0000 (23:32 +0000)
Lib/test/test_io.py
Lib/test/test_posix.py
Modules/_io/fileio.c

index accf0eb2cc8bb11028d3dd6b0c80094c2c6b06bd..9ffe646ea9fd2b67e8765efd9f1dad69862f0bdc 100644 (file)
@@ -2394,47 +2394,6 @@ class MiscIOTest(unittest.TestCase):
         # baseline "io" module.
         self._check_abc_inheritance(io)
 
-    # Issue #5380: reading all available bytes from a pipe or a PTY when
-    # the other end has been closed.
-
-    def check_pipe_func(self, pipe_func, buffered):
-        master_fd, slave_fd = pipe_func()
-        # Simulate a subprocess writing some data to the
-        # slave end of the pipe, and then exiting.
-        data = b'TEST DATA'
-        try:
-            os.write(slave_fd, data)
-        finally:
-            os.close(slave_fd)
-        with self.open(master_fd, "rb", buffering=-1 if buffered else 0) as f:
-            # Request more data than available
-            gotdata = f.read(len(data) + 1)
-            self.assertEqual(gotdata, data)
-            # Trying to read again returns an empty string
-            self.assertEqual(b'', f.read())
-            self.assertEqual(b'', f.read(1))
-
-    def test_pipe_read_buffered(self):
-        if not hasattr(os, 'pipe'):
-            self.skipTest("os.pipe not available")
-        self.check_pipe_func(os.pipe, True)
-
-    def test_pipe_read_raw(self):
-        if not hasattr(os, 'pipe'):
-            self.skipTest("os.pipe not available")
-        self.check_pipe_func(os.pipe, False)
-
-    def test_openpty_read_buffered(self):
-        if not hasattr(os, 'openpty'):
-            self.skipTest("os.openpty not available")
-        self.check_pipe_func(os.openpty, True)
-
-    def test_openpty_read_raw(self):
-        if not hasattr(os, 'openpty'):
-            self.skipTest("os.openpty not available")
-        self.check_pipe_func(os.openpty, False)
-
-
 class CMiscIOTest(MiscIOTest):
     io = io
 
index 3caf82493fdb4428f2b83a095ad30a52369136a3..afeb616ddca7217ec5d54e95121712d87ad3a6d3 100644 (file)
@@ -280,29 +280,11 @@ class PosixTester(unittest.TestCase):
         if hasattr(posix, 'strerror'):
             self.assertTrue(posix.strerror(0))
 
-    def check_pipe_func(self, pipe_func):
-        master_fd, slave_fd = pipe_func()
-        try:
-            # Simulate a subprocess writing some data to the
-            # slave end of the pipe, and then exiting.
-            data = b'TEST DATA'
-            try:
-                os.write(slave_fd, data)
-            finally:
-                os.close(slave_fd)
-            # Request more data than available
-            gotdata = os.read(master_fd, len(data) + 1)
-            self.assertEqual(gotdata, data)
-        finally:
-            os.close(master_fd)
-
     def test_pipe(self):
         if hasattr(posix, 'pipe'):
-            self.check_pipe_func(posix.pipe)
-
-    def test_openpty(self):
-        if hasattr(posix, 'openpty'):
-            self.check_pipe_func(posix.openpty)
+            reader, writer = posix.pipe()
+            os.close(reader)
+            os.close(writer)
 
     def test_tempnam(self):
         if hasattr(posix, 'tempnam'):
index 8f174a7edb573cb18b179e97eb47f963ec3eeb77..ec320f79b977715c04a964fc70e29d8e8cb55d7f 100644 (file)
@@ -464,34 +464,6 @@ fileio_seekable(fileio *self)
        return PyBool_FromLong((long) self->seekable);
 }
 
-static Py_ssize_t
-internal_read(int fd, void *buf, size_t count)
-{
-       Py_ssize_t n;
-
-       Py_BEGIN_ALLOW_THREADS
-       errno = 0;
-       n = read(fd, buf, count);
-#ifdef EIO
-       /* Issue #5380: when reading past the end of a pipe created by
-          openpty(), EIO can be set.  Make it an EOF instead, so that
-          the normal technique of testing for an empty string can be used.
-        */
-       if (n == -1 && errno == EIO) {
-               if (isatty(fd)) {
-                       n = 0;
-                       errno = 0;
-               }
-               else {
-                       /* isatty() set errno, restore its value */
-                       errno = EIO;
-               }
-       }
-#endif
-       Py_END_ALLOW_THREADS
-       return n;
-}
-
 static PyObject *
 fileio_readinto(fileio *self, PyObject *args)
 {
@@ -506,9 +478,12 @@ fileio_readinto(fileio *self, PyObject *args)
        if (!PyArg_ParseTuple(args, "w*", &pbuf))
                return NULL;
 
-       if (_PyVerify_fd(self->fd))
-               n = internal_read(self->fd, pbuf.buf, pbuf.len);
-       else
+       if (_PyVerify_fd(self->fd)) {
+               Py_BEGIN_ALLOW_THREADS
+               errno = 0;
+               n = read(self->fd, pbuf.buf, pbuf.len);
+               Py_END_ALLOW_THREADS
+       } else
                n = -1;
        PyBuffer_Release(&pbuf);
        if (n < 0) {
@@ -585,9 +560,12 @@ fileio_readall(fileio *self)
                                break;
                        }
                }
-               n = internal_read(self->fd,
-                                 PyBytes_AS_STRING(result) + total,
-                                 newsize - total);
+               Py_BEGIN_ALLOW_THREADS
+               errno = 0;
+               n = read(self->fd,
+                        PyBytes_AS_STRING(result) + total,
+                        newsize - total);
+               Py_END_ALLOW_THREADS
                if (n == 0)
                        break;
                if (n < 0) {
@@ -639,9 +617,12 @@ fileio_read(fileio *self, PyObject *args)
                return NULL;
        ptr = PyBytes_AS_STRING(bytes);
 
-       if (_PyVerify_fd(self->fd))
-               n = internal_read(self->fd, ptr, size);
-       else
+       if (_PyVerify_fd(self->fd)) {
+               Py_BEGIN_ALLOW_THREADS
+               errno = 0;
+               n = read(self->fd, ptr, size);
+               Py_END_ALLOW_THREADS
+       } else
                n = -1;
 
        if (n < 0) {