Author: Brian Kearns <[email protected]>
Branch: 
Changeset: r73330:351bf5327716
Date: 2014-09-05 15:39 -0400
http://bitbucket.org/pypy/pypy/changeset/351bf5327716/

Log:    use IOError where appropriate in rfile

diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py
--- a/rpython/rlib/rfile.py
+++ b/rpython/rlib/rfile.py
@@ -93,7 +93,7 @@
 def _error(ll_file):
     err = c_ferror(ll_file)
     c_clearerr(ll_file)
-    raise OSError(err, os.strerror(err))
+    raise IOError(err, os.strerror(err))
 
 
 def _dircheck(ll_file):
@@ -104,7 +104,7 @@
     else:
         if stat.S_ISDIR(st[0]):
             err = errno.EISDIR
-            raise OSError(err, os.strerror(err))
+            raise IOError(err, os.strerror(err))
 
 
 def _sanitize_mode(mode):
@@ -136,7 +136,7 @@
             ll_file = c_fopen(ll_name, ll_mode)
             if not ll_file:
                 errno = rposix.get_errno()
-                raise OSError(errno, os.strerror(errno))
+                raise IOError(errno, os.strerror(errno))
         finally:
             lltype.free(ll_mode, flavor='raw')
     finally:
@@ -223,7 +223,7 @@
             res = do_close(ll_file)
             if res == -1:
                 errno = rposix.get_errno()
-                raise OSError(errno, os.strerror(errno))
+                raise IOError(errno, os.strerror(errno))
         return res
 
     def _check_closed(self):
@@ -341,7 +341,7 @@
             bytes = c_fwrite(ll_value, 1, length, self._ll_file)
             if bytes != length:
                 errno = rposix.get_errno()
-                raise OSError(errno, os.strerror(errno))
+                raise IOError(errno, os.strerror(errno))
         finally:
             rffi.free_nonmovingbuffer(value, ll_value)
 
@@ -350,7 +350,7 @@
         res = c_fflush(self._ll_file)
         if res != 0:
             errno = rposix.get_errno()
-            raise OSError(errno, os.strerror(errno))
+            raise IOError(errno, os.strerror(errno))
 
     def truncate(self, arg=-1):
         self._check_closed()
@@ -360,21 +360,21 @@
         res = c_ftruncate(self.fileno(), arg)
         if res == -1:
             errno = rposix.get_errno()
-            raise OSError(errno, os.strerror(errno))
+            raise IOError(errno, os.strerror(errno))
 
     def seek(self, pos, whence=0):
         self._check_closed()
         res = c_fseek(self._ll_file, pos, whence)
         if res == -1:
             errno = rposix.get_errno()
-            raise OSError(errno, os.strerror(errno))
+            raise IOError(errno, os.strerror(errno))
 
     def tell(self):
         self._check_closed()
         res = intmask(c_ftell(self._ll_file))
         if res == -1:
             errno = rposix.get_errno()
-            raise OSError(errno, os.strerror(errno))
+            raise IOError(errno, os.strerror(errno))
         return res
 
     def fileno(self):
diff --git a/rpython/rlib/test/test_rfile.py b/rpython/rlib/test/test_rfile.py
--- a/rpython/rlib/test/test_rfile.py
+++ b/rpython/rlib/test/test_rfile.py
@@ -25,61 +25,67 @@
             f.close()
 
         f()
+        assert open(fname, "r").read() == "dupa"
         self.interpret(f, [])
         assert open(fname, "r").read() == "dupa"
 
     def test_open_errors(self):
-        def f(exc):
-            def g(run):
-                try:
-                    open('zzz', 'badmode')
-                except ValueError:
-                    pass
+        def f(run):
+            try:
+                open('zzz', 'badmode')
+            except ValueError:
+                pass
+            else:
+                assert False
+
+            try:
+                open('zzz')
+            except IOError as e:
+                assert e.errno == errno.ENOENT
+            else:
+                assert False
+
+            try:
+                open('.')
+            except IOError as e:
+                if os.name == 'posix':
+                    assert e.errno == errno.EISDIR
                 else:
-                    assert False
+                    assert e.errno == errno.EACCES
+            else:
+                assert False
 
-                try:
-                    open('zzz')
-                except exc as e:
-                    assert e.errno == errno.ENOENT
-                else:
-                    assert False
+            try:
+                os.fdopen(42, "badmode")
+            except ValueError:
+                pass
+            else:
+                assert False
 
-                try:
-                    open('.')
-                except exc as e:
-                    if os.name == 'posix':
+            try:
+                fd = os.open('.', os.O_RDONLY, 0777)
+            except OSError as e:
+                assert os.name == 'nt' and e.errno == errno.EACCES
+            else:
+                assert os.name != 'nt'
+                if run:
+                    try:
+                        os.fdopen(fd)
+                    except IOError as e:
                         assert e.errno == errno.EISDIR
                     else:
-                        assert e.errno == errno.EACCES
-                else:
-                    assert False
+                        assert False
+                os.close(fd)
 
-                try:
-                    os.fdopen(42, "badmode")
-                except ValueError:
-                    pass
-                else:
-                    assert False
+            try:
+                os.fdopen(12345)
+            except OSError as e:
+                assert e.errno == errno.EBADF
+            else:
+                assert False
 
-                try:
-                    fd = os.open('.', os.O_RDONLY, 0777)
-                except OSError as e:
-                    assert os.name == 'nt' and e.errno == errno.EACCES
-                else:
-                    assert os.name != 'nt'
-                    if run:
-                        try:
-                            os.fdopen(fd)
-                        except exc as e:
-                            assert e.errno == errno.EISDIR
-                        else:
-                            assert False
-                    os.close(fd)
-            return g
-
-        f(IOError)(sys.version_info >= (2, 7, 9))
-        self.interpret(f(OSError), [True])
+        f(sys.version_info >= (2, 7, 9))
+        self.interpret(f, [True])
 
     @py.test.mark.skipif("sys.platform == 'win32'")
     # http://msdn.microsoft.com/en-us/library/86cebhfs.aspx
@@ -120,6 +126,12 @@
 
         def f():
             f = open(fname, "w")
+            try:
+                f.read()
+            except IOError as e:
+                pass
+            else:
+                assert False
             f.write("dupa\x00dupb")
             f.close()
             for mode in ['r', 'U']:
@@ -162,6 +174,7 @@
             assert d == "a"
             assert e == ""
 
+        f()
         self.interpret(f, [])
 
     def test_seek(self):
@@ -172,6 +185,12 @@
             f.write("xxx")
             f.seek(0)
             assert f.read() == "xxx"
+            try:
+                f.seek(0, 42)
+            except IOError as e:
+                assert e.errno == errno.EINVAL
+            else:
+                assert False
             f.close()
 
         f()
@@ -214,6 +233,8 @@
             finally:
                 f.close()
 
+        res = f()
+        assert res > 2
         res = self.interpret(f, [])
         assert res > 2
 
@@ -228,6 +249,8 @@
             finally:
                 f.close()
 
+        res = f()
+        assert res == 3
         res = self.interpret(f, [])
         assert res == 3
 
@@ -243,6 +266,7 @@
             f2.close()
             f.close()
 
+        f()
         self.interpret(f, [])
 
     def test_truncate(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to