Author: Brian Kearns <[email protected]>
Branch: use-file-star-for-file
Changeset: r73453:81a458fbb16b
Date: 2014-09-11 04:37 -0400
http://bitbucket.org/pypy/pypy/changeset/81a458fbb16b/
Log: use a growing buffer for rfile read
diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py
--- a/rpython/rlib/rfile.py
+++ b/rpython/rlib/rfile.py
@@ -45,7 +45,6 @@
BUFSIZ = config['BUFSIZ']
EOF = config['EOF']
-BASE_BUF_SIZE = 4096
BASE_LINE_SIZE = 100
NEWLINE_UNKNOWN = 0
@@ -346,6 +345,10 @@
self._skipnextlf = skipnextlf
return i
+ def _new_buffersize(self, currentsize):
+ # XXX use fstat if possible
+ return currentsize + (currentsize >> 3) + 6
+
def read(self, size=-1):
self._check_closed()
self._check_readable()
@@ -353,7 +356,7 @@
bytesrequested = size
if bytesrequested < 0:
- buffersize = BASE_BUF_SIZE
+ buffersize = self._new_buffersize(0)
else:
buffersize = bytesrequested
bytesread = 0
@@ -387,6 +390,10 @@
break
if bytesrequested >= 0:
break
+ else:
+ buffersize = self._new_buffersize(buffersize)
+ lltype.free(buf, flavor='raw')
+ buf = lltype.malloc(rffi.CCHARP.TO, buffersize,
flavor='raw')
finally:
lltype.free(buf, flavor='raw')
return s.build()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit