Author: Brian Kearns <[email protected]>
Branch: use-file-star-for-file
Changeset: r73508:9cc506ff40ab
Date: 2014-09-12 11:42 -0400
http://bitbucket.org/pypy/pypy/changeset/9cc506ff40ab/
Log: do proper error handling in getline_fgets
diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py
--- a/rpython/rlib/rfile.py
+++ b/rpython/rlib/rfile.py
@@ -445,6 +445,14 @@
result = c_fgets(raw_buf, BASE_LINE_SIZE, ll_file)
if not result:
+ if c_ferror(ll_file):
+ if rposix.get_errno() == errno.EINTR:
+ if self._signal_checker is not None:
+ self._signal_checker()
+ c_clearerr(ll_file)
+ return -1
+ c_clearerr(ll_file)
+ raise _from_errno(IOError)
c_clearerr(ll_file)
if self._signal_checker is not None:
self._signal_checker()
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
@@ -307,6 +307,28 @@
f2.write("xxx")
f2.close()
+ fd = os.open(fname, os.O_RDONLY, 0777)
+ f = os.fdopen(fd, 'r')
+ os.close(fd)
+ try:
+ f.read()
+ except IOError as e:
+ pass
+ else:
+ assert False
+ try:
+ f.readline()
+ except IOError as e:
+ pass
+ else:
+ assert False
+ try:
+ f.close()
+ except IOError as e:
+ pass
+ else:
+ assert False
+
f()
assert open(fname).read() == "xxx"
self.interpret(f, [])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit