# pylint: disable=unused-import
from contextlib import nullcontext
+ from mmap import mmap
from os import environb as environ
from os import fsdecode, fsencode
from shlex import quote
else: # Python 2
from contextlib import contextmanager
+ import mmap as py_mmap
ModuleNotFoundError = ImportError
buffer = buffer
+ assert not hasattr(py_mmap.mmap, '__enter__')
+ assert not hasattr(py_mmap.mmap, '__exit__')
+
+ class mmap(py_mmap.mmap):
+ def __enter__(self):
+ return self
+ def __exit__(self, type, value, traceback):
+ with pending_raise(value, rethrow=False):
+ self.close()
+
try:
import bup_main
except ModuleNotFoundError:
# string has all the same behaviour of a zero-length map, ie. it has
# no elements :)
return ''
- map = mmap.mmap(f.fileno(), sz, flags, prot)
+ map = compat.mmap(f.fileno(), sz, flags, prot)
if close:
f.close() # map will persist beyond file close
return map
pos = _fmincore_chunk_size * ci;
msize = min(_fmincore_chunk_size, st.st_size - pos)
try:
- m = mmap.mmap(fd, msize, mmap.MAP_PRIVATE, 0, 0, pos)
+ m = compat.mmap(fd, msize, mmap.MAP_PRIVATE, 0, 0, pos)
except mmap.error as ex:
if ex.errno == errno.EINVAL or ex.errno == errno.ENODEV:
# Perhaps the file was a pipe, i.e. "... | bup split ..."