]> Cypherpunks.ru repositories - pyderasn.git/blobdiff - pyderasn.py
Hide mmap imports, failing on Windows
[pyderasn.git] / pyderasn.py
index 516715a7f2e419a6d1070c03eee7f2c07bb1b895..4b690f72b1ed1ec2c1c20e59b6f3acdd7620f262 100755 (executable)
@@ -1170,8 +1170,6 @@ from datetime import datetime
 from datetime import timedelta
 from io import BytesIO
 from math import ceil
-from mmap import mmap
-from mmap import PROT_READ
 from operator import attrgetter
 from string import ascii_letters
 from string import digits
@@ -1201,7 +1199,7 @@ except ImportError:  # pragma: no cover
     def colored(what, *args, **kwargs):
         return what
 
-__version__ = "8.0"
+__version__ = "8.1"
 
 __all__ = (
     "agg_octet_string",
@@ -1292,8 +1290,13 @@ def file_mmaped(fd):
 
     :param fd: file object
     :returns: memoryview over read-only mmap-ing of the whole file
+
+    .. warning::
+
+       It is known to work under neither Python 2.x nor Windows.
     """
-    return memoryview(mmap(fd.fileno(), 0, prot=PROT_READ))
+    import mmap
+    return memoryview(mmap.mmap(fd.fileno(), length=0, prot=mmap.PROT_READ))
 
 
 def pureint(value):
@@ -7897,12 +7900,12 @@ def main():  # pragma: no cover
         help="Path to BER/CER/DER file you want to decode",
     )
     args = parser.parse_args()
-    if PY2:
+    try:
+        raw = file_mmaped(args.RAWFile)[args.skip:]
+    except:
         args.RAWFile.seek(args.skip)
         raw = memoryview(args.RAWFile.read())
         args.RAWFile.close()
-    else:
-        raw = file_mmaped(args.RAWFile)[args.skip:]
     oid_maps = (
         [obj_by_path(_path) for _path in (args.oids or "").split(",")]
         if args.oids else ()