[pypy-commit] pypy use-file-star-for-file: fix large seek/tell offsets

bdkearns noreply at buildbot.pypy.org
Fri Sep 12 22:20:16 CEST 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: use-file-star-for-file
Changeset: r73514:9190ab687bde
Date: 2014-09-12 13:19 -0700
http://bitbucket.org/pypy/pypy/changeset/9190ab687bde/

Log:	fix large seek/tell offsets

diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py
--- a/rpython/rlib/rfile.py
+++ b/rpython/rlib/rfile.py
@@ -112,8 +112,11 @@
 
 c_ftruncate = llexternal(ftruncate, [rffi.INT, OFF_T], rffi.INT, macro=True)
 
-c_fseek = llexternal('fseek', [FILEP, rffi.LONG, rffi.INT], rffi.INT)
-c_ftell = llexternal('ftell', [FILEP], rffi.LONG)
+c_fseek = llexternal('fseeko', [FILEP, OFF_T, rffi.INT], rffi.INT)
+c_ftell = llexternal('ftello', [FILEP], OFF_T)
+if os.name == 'nt':
+    c_fseek = llexternal('_fseeki64', [FILEP, rffi.LONGLONG, rffi.INT], rffi.INT)
+    c_ftell = llexternal('_ftelli64', [FILEP], rffi.LONGLONG)
 
 c_fileno = llexternal(fileno, [FILEP], rffi.INT, releasegil=False)
 c_feof = llexternal('feof', [FILEP], rffi.INT, releasegil=False)
@@ -592,7 +595,7 @@
         self._check_closed()
         self._check_writable()
         ll_file = self._ll_file
-        pos = intmask(c_ftell(ll_file))
+        pos = c_ftell(ll_file)
         if pos == -1:
             c_clearerr(ll_file)
             raise _from_errno(IOError)
@@ -628,7 +631,7 @@
 
     def tell(self):
         self._check_closed()
-        res = intmask(c_ftell(self._ll_file))
+        res = c_ftell(self._ll_file)
         if res == -1:
             c_clearerr(self._ll_file)
             raise _from_errno(IOError)


More information about the pypy-commit mailing list