1 // Windows/FileName.h 2 3 #ifndef __WINDOWS_FILE_NAME_H 4 #define __WINDOWS_FILE_NAME_H 5 6 #include "../Common/MyString.h" 7 8 namespace NWindows { 9 namespace NFile { 10 namespace NName { 11 12 void NormalizeDirPathPrefix(FString &dirPath); // ensures that it ended with '\\', if dirPath is not epmty 13 void NormalizeDirPathPrefix(UString &dirPath); 14 15 #ifdef _WIN32 16 17 extern const wchar_t *kSuperPathPrefix; /* \\?\ */ 18 const unsigned kDevicePathPrefixSize = 4; 19 const unsigned kSuperPathPrefixSize = 4; 20 const unsigned kSuperUncPathPrefixSize = kSuperPathPrefixSize + 4; 21 22 bool IsDevicePath(CFSTR s) throw(); /* \\.\ */ 23 bool IsSuperUncPath(CFSTR s) throw(); 24 25 bool IsDrivePath(const wchar_t *s) throw(); 26 bool IsSuperPath(const wchar_t *s) throw(); 27 bool IsSuperOrDevicePath(const wchar_t *s) throw(); 28 29 #ifndef USE_UNICODE_FSTRING 30 bool IsDrivePath(CFSTR s) throw(); 31 bool IsSuperPath(CFSTR s) throw(); 32 bool IsSuperOrDevicePath(CFSTR s) throw(); 33 #endif 34 35 #endif // _WIN32 36 37 bool IsAbsolutePath(const wchar_t *s) throw(); 38 unsigned GetRootPrefixSize(const wchar_t *s) throw(); 39 40 #ifdef WIN_LONG_PATH 41 42 const int kSuperPathType_UseOnlyMain = 0; 43 const int kSuperPathType_UseOnlySuper = 1; 44 const int kSuperPathType_UseMainAndSuper = 2; 45 46 int GetUseSuperPathType(CFSTR s) throw(); 47 bool GetSuperPath(CFSTR path, UString &longPath, bool onlyIfNew); 48 bool GetSuperPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2, bool onlyIfNew); 49 50 #define USE_MAIN_PATH (__useSuperPathType != kSuperPathType_UseOnlySuper) 51 #define USE_MAIN_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlySuper && __useSuperPathType2 != kSuperPathType_UseOnlySuper) 52 53 #define USE_SUPER_PATH (__useSuperPathType != kSuperPathType_UseOnlyMain) 54 #define USE_SUPER_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlyMain || __useSuperPathType2 != kSuperPathType_UseOnlyMain) 55 56 #define IF_USE_MAIN_PATH int __useSuperPathType = GetUseSuperPathType(path); if (USE_MAIN_PATH) 57 #define IF_USE_MAIN_PATH_2(x1, x2) \ 58 int __useSuperPathType1 = GetUseSuperPathType(x1); \ 59 int __useSuperPathType2 = GetUseSuperPathType(x2); \ 60 if (USE_MAIN_PATH_2) 61 62 #else 63 64 #define IF_USE_MAIN_PATH 65 #define IF_USE_MAIN_PATH_2(x1, x2) 66 67 #endif // WIN_LONG_PATH 68 69 bool GetFullPath(CFSTR dirPrefix, CFSTR path, FString &fullPath); 70 bool GetFullPath(CFSTR path, FString &fullPath); 71 72 }}} 73 74 #endif 75