]> granicus.if.org Git - python/commitdiff
bpo-37412: pythoninfo: add Windows long paths (GH-14434)
authorVictor Stinner <vstinner@redhat.com>
Fri, 28 Jun 2019 16:05:05 +0000 (18:05 +0200)
committerGitHub <noreply@github.com>
Fri, 28 Jun 2019 16:05:05 +0000 (18:05 +0200)
On Windows, test.pythoninfo now checks if support for long paths is
enabled using ntdll.RtlAreLongPathsEnabled() function.

Co-Authored-By: Eryk Sun <eryksun@gmail.com>
Lib/test/pythoninfo.py

index 6eb9e875bd677291c89c56e7e7a4ba0c52573751..28a902355e8a3bf396a70cdf245664264736df44 100644 (file)
@@ -651,6 +651,29 @@ def collect_subprocess(info_add):
     copy_attributes(info_add, subprocess, 'subprocess.%s', ('_USE_POSIX_SPAWN',))
 
 
+def collect_windows(info_add):
+    try:
+        import ctypes
+    except ImportError:
+        return
+
+    if not hasattr(ctypes, 'WinDLL'):
+        return
+
+    ntdll = ctypes.WinDLL('ntdll')
+    BOOLEAN = ctypes.c_ubyte
+
+    try:
+        RtlAreLongPathsEnabled = ntdll.RtlAreLongPathsEnabled
+    except AttributeError:
+        res = '<function not available>'
+    else:
+        RtlAreLongPathsEnabled.restype = BOOLEAN
+        RtlAreLongPathsEnabled.argtypes = ()
+        res = bool(RtlAreLongPathsEnabled())
+    info_add('windows.RtlAreLongPathsEnabled', res)
+
+
 def collect_info(info):
     error = False
     info_add = info.add
@@ -684,6 +707,7 @@ def collect_info(info):
         collect_testcapi,
         collect_time,
         collect_tkinter,
+        collect_windows,
         collect_zlib,
 
         # Collecting from tests should be last as they have side effects.