##// END OF EJS Templates
win32: implement util.getfstype()...
Matt Harbison -
r35528:2062f7c2 default
parent child Browse files
Show More
@@ -223,6 +223,24 b' except AttributeError:'
223 _kernel32.SetFileAttributesA.argtypes = [_LPCSTR, _DWORD]
223 _kernel32.SetFileAttributesA.argtypes = [_LPCSTR, _DWORD]
224 _kernel32.SetFileAttributesA.restype = _BOOL
224 _kernel32.SetFileAttributesA.restype = _BOOL
225
225
226 _DRIVE_UNKNOWN = 0
227 _DRIVE_NO_ROOT_DIR = 1
228 _DRIVE_REMOVABLE = 2
229 _DRIVE_FIXED = 3
230 _DRIVE_REMOTE = 4
231 _DRIVE_CDROM = 5
232 _DRIVE_RAMDISK = 6
233
234 _kernel32.GetDriveTypeA.argtypes = [_LPCSTR]
235 _kernel32.GetDriveTypeA.restype = _UINT
236
237 _kernel32.GetVolumeInformationA.argtypes = [_LPCSTR, ctypes.c_void_p, _DWORD,
238 ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, _DWORD]
239 _kernel32.GetVolumeInformationA.restype = _BOOL
240
241 _kernel32.GetVolumePathNameA.argtypes = [_LPCSTR, ctypes.c_void_p, _DWORD]
242 _kernel32.GetVolumePathNameA.restype = _BOOL
243
226 _kernel32.OpenProcess.argtypes = [_DWORD, _BOOL, _DWORD]
244 _kernel32.OpenProcess.argtypes = [_DWORD, _BOOL, _DWORD]
227 _kernel32.OpenProcess.restype = _HANDLE
245 _kernel32.OpenProcess.restype = _HANDLE
228
246
@@ -410,6 +428,37 b' def executablepath():'
410 raise ctypes.WinError(_ERROR_INSUFFICIENT_BUFFER)
428 raise ctypes.WinError(_ERROR_INSUFFICIENT_BUFFER)
411 return buf.value
429 return buf.value
412
430
431 def getfstype(path):
432 """Get the filesystem type name from a directory or file (best-effort)
433
434 Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
435 """
436 # realpath() calls GetFullPathName()
437 realpath = os.path.realpath(path)
438
439 size = len(realpath) + 1
440 buf = ctypes.create_string_buffer(size)
441
442 if not _kernel32.GetVolumePathNameA(realpath, ctypes.byref(buf), size):
443 raise ctypes.WinError() # Note: WinError is a function
444
445 t = _kernel32.GetDriveTypeA(buf.value)
446
447 if t == _DRIVE_REMOTE:
448 return 'cifs'
449 elif t not in (_DRIVE_REMOVABLE, _DRIVE_FIXED, _DRIVE_CDROM,
450 _DRIVE_RAMDISK):
451 return None
452
453 size = 256
454 name = ctypes.create_string_buffer(size)
455
456 if not _kernel32.GetVolumeInformationA(buf.value, None, 0, None, None, None,
457 ctypes.byref(name), size):
458 raise ctypes.WinError() # Note: WinError is a function
459
460 return name.value
461
413 def getuser():
462 def getuser():
414 '''return name of current user'''
463 '''return name of current user'''
415 size = _DWORD(300)
464 size = _DWORD(300)
@@ -32,6 +32,7 b' except ImportError:'
32 osutil = policy.importmod(r'osutil')
32 osutil = policy.importmod(r'osutil')
33
33
34 executablepath = win32.executablepath
34 executablepath = win32.executablepath
35 getfstype = win32.getfstype
35 getuser = win32.getuser
36 getuser = win32.getuser
36 hidewindow = win32.hidewindow
37 hidewindow = win32.hidewindow
37 makedir = win32.makedir
38 makedir = win32.makedir
@@ -226,13 +227,6 b' def checkexec(path):'
226 def checklink(path):
227 def checklink(path):
227 return False
228 return False
228
229
229 def getfstype(dirpath):
230 '''Get the filesystem type name from a directory (best-effort)
231
232 Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
233 '''
234 return None
235
236 def setbinary(fd):
230 def setbinary(fd):
237 # When run without console, pipes may expose invalid
231 # When run without console, pipes may expose invalid
238 # fileno(), usually set to -1.
232 # fileno(), usually set to -1.
General Comments 0
You need to be logged in to leave comments. Login now