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