##// END OF EJS Templates
util: make `mmapread()` work on Windows again...
Matt Harbison -
r52823:bc9ed92d default
parent child Browse files
Show More
@@ -485,15 +485,24 def mmapread(fp, size=None, pre_populate
485 elif size is None:
485 elif size is None:
486 size = 0
486 size = 0
487 fd = getattr(fp, 'fileno', lambda: fp)()
487 fd = getattr(fp, 'fileno', lambda: fp)()
488
489 if pycompat.iswindows:
490 _mmap = lambda fd, size: mmap.mmap(fd, size, access=mmap.ACCESS_READ)
491 else:
488 flags = mmap.MAP_PRIVATE
492 flags = mmap.MAP_PRIVATE
489 bg_populate = hasattr(osutil, "background_mmap_populate")
493 bg_populate = hasattr(osutil, "background_mmap_populate")
494
490 if pre_populate and not bg_populate:
495 if pre_populate and not bg_populate:
491 flags |= getattr(mmap, 'MAP_POPULATE', 0)
496 flags |= getattr(mmap, 'MAP_POPULATE', 0)
492 try:
497
498 def _mmap(fd, size) -> mmap.mmap:
493 m = mmap.mmap(fd, size, flags=flags, prot=mmap.PROT_READ)
499 m = mmap.mmap(fd, size, flags=flags, prot=mmap.PROT_READ)
494 if pre_populate and bg_populate:
500 if pre_populate and bg_populate:
495 osutil.background_mmap_populate(m)
501 osutil.background_mmap_populate(m)
496 return m
502 return m
503
504 try:
505 return _mmap(fd, size)
497 except ValueError:
506 except ValueError:
498 # Empty files cannot be mmapped, but mmapread should still work. Check
507 # Empty files cannot be mmapped, but mmapread should still work. Check
499 # if the file is empty, and if so, return an empty buffer.
508 # if the file is empty, and if so, return an empty buffer.
General Comments 0
You need to be logged in to leave comments. Login now