pyodide: no mmap (#39)

This lets the library work on platforms without `mmap()`.
This commit is contained in:
jcaesar 2020-03-27 01:17:38 +09:00 committed by GitHub
parent f5150e4d67
commit dc578f6582
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 5 deletions

View File

@ -104,14 +104,18 @@ class DAF(object):
fileno = self.file.fileno()
except (AttributeError, io.UnsupportedOperation):
fileno = None
if fileno is None:
m = None
if fileno is not None:
skip = i % mmap.ALLOCATIONGRANULARITY
r = mmap.ACCESS_READ
try:
m = mmap.mmap(fileno, length=j-i+skip, access=r, offset=i-skip)
except OSError:
m = None
if m is None:
skip = 0
self.file.seek(i)
m = self.file.read(j - i)
else:
skip = i % mmap.ALLOCATIONGRANULARITY
r = mmap.ACCESS_READ
m = mmap.mmap(fileno, length=j-i+skip, access=r, offset=i-skip)
if sys.version_info > (3,):
m = memoryview(m) # so further slicing can return views
return m, skip