equal
deleted
inserted
replaced
437 Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc. |
437 Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc. |
438 """ |
438 """ |
439 # realpath() calls GetFullPathName() |
439 # realpath() calls GetFullPathName() |
440 realpath = os.path.realpath(path) |
440 realpath = os.path.realpath(path) |
441 |
441 |
442 size = len(realpath) + 1 |
442 # allocate at least MAX_PATH long since GetVolumePathName('c:\\', buf, 4) |
|
443 # somehow fails on Windows XP |
|
444 size = max(len(realpath), _MAX_PATH) + 1 |
443 buf = ctypes.create_string_buffer(size) |
445 buf = ctypes.create_string_buffer(size) |
444 |
446 |
445 if not _kernel32.GetVolumePathNameA(realpath, ctypes.byref(buf), size): |
447 if not _kernel32.GetVolumePathNameA(realpath, ctypes.byref(buf), size): |
446 raise ctypes.WinError() # Note: WinError is a function |
448 raise ctypes.WinError() # Note: WinError is a function |
447 |
449 |