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 int FindSepar(const wchar_t *s) throw(); 13 #ifndef USE_UNICODE_FSTRING 14 int FindSepar(const FChar *s) throw(); 15 #endif 16 17 void NormalizeDirPathPrefix(FString &dirPath); // ensures that it ended with '\\', if dirPath is not epmty 18 void NormalizeDirPathPrefix(UString &dirPath); 19 20 bool IsDrivePath(const wchar_t *s) throw(); // first 3 chars are drive chars like "a:\\" 21 22 bool IsAltPathPrefix(CFSTR s) throw(); /* name: */ 23 24 #if defined(_WIN32) && !defined(UNDER_CE) 25 26 extern const char * const kSuperPathPrefix; /* \\?\ */ 27 const unsigned kDevicePathPrefixSize = 4; 28 const unsigned kSuperPathPrefixSize = 4; 29 const unsigned kSuperUncPathPrefixSize = kSuperPathPrefixSize + 4; 30 31 bool IsDevicePath(CFSTR s) throw(); /* \\.\ */ 32 bool IsSuperUncPath(CFSTR s) throw(); /* \\?\UNC\ */ 33 bool IsNetworkPath(CFSTR s) throw(); /* \\?\UNC\ or \\SERVER */ 34 35 /* GetNetworkServerPrefixSize() returns size of server prefix: 36 \\?\UNC\SERVER\ 37 \\SERVER\ 38 in another cases it returns 0 39 */ 40 41 unsigned GetNetworkServerPrefixSize(CFSTR s) throw(); 42 43 bool IsNetworkShareRootPath(CFSTR s) throw(); /* \\?\UNC\SERVER\share or \\SERVER\share or with slash */ 44 45 bool IsDrivePath_SuperAllowed(CFSTR s) throw(); // first chars are drive chars like "a:\" or "\\?\a:\" 46 bool IsDriveRootPath_SuperAllowed(CFSTR s) throw(); // exact drive root path "a:\" or "\\?\a:\" 47 48 bool IsDrivePath2(const wchar_t *s) throw(); // first 2 chars are drive chars like "a:" 49 // bool IsDriveName2(const wchar_t *s) throw(); // is drive name like "a:" 50 bool IsSuperPath(const wchar_t *s) throw(); 51 bool IsSuperOrDevicePath(const wchar_t *s) throw(); 52 53 #ifndef USE_UNICODE_FSTRING 54 bool IsDrivePath2(CFSTR s) throw(); // first 2 chars are drive chars like "a:" 55 // bool IsDriveName2(CFSTR s) throw(); // is drive name like "a:" 56 bool IsDrivePath(CFSTR s) throw(); 57 bool IsSuperPath(CFSTR s) throw(); 58 bool IsSuperOrDevicePath(CFSTR s) throw(); 59 60 /* GetRootPrefixSize() returns size of ROOT PREFIX for cases: 61 \ 62 \\.\ 63 C:\ 64 \\?\C:\ 65 \\?\UNC\SERVER\Shared\ 66 \\SERVER\Shared\ 67 in another cases it returns 0 68 */ 69 70 unsigned GetRootPrefixSize(CFSTR s) throw(); 71 72 #endif 73 74 int FindAltStreamColon(CFSTR path) throw(); 75 76 #endif // _WIN32 77 78 bool IsAbsolutePath(const wchar_t *s) throw(); 79 unsigned GetRootPrefixSize(const wchar_t *s) throw(); 80 81 #ifdef WIN_LONG_PATH 82 83 const int kSuperPathType_UseOnlyMain = 0; 84 const int kSuperPathType_UseOnlySuper = 1; 85 const int kSuperPathType_UseMainAndSuper = 2; 86 87 int GetUseSuperPathType(CFSTR s) throw(); 88 bool GetSuperPath(CFSTR path, UString &superPath, bool onlyIfNew); 89 bool GetSuperPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2, bool onlyIfNew); 90 91 #define USE_MAIN_PATH (__useSuperPathType != kSuperPathType_UseOnlySuper) 92 #define USE_MAIN_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlySuper && __useSuperPathType2 != kSuperPathType_UseOnlySuper) 93 94 #define USE_SUPER_PATH (__useSuperPathType != kSuperPathType_UseOnlyMain) 95 #define USE_SUPER_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlyMain || __useSuperPathType2 != kSuperPathType_UseOnlyMain) 96 97 #define IF_USE_MAIN_PATH int __useSuperPathType = GetUseSuperPathType(path); if (USE_MAIN_PATH) 98 #define IF_USE_MAIN_PATH_2(x1, x2) \ 99 int __useSuperPathType1 = GetUseSuperPathType(x1); \ 100 int __useSuperPathType2 = GetUseSuperPathType(x2); \ 101 if (USE_MAIN_PATH_2) 102 103 #else 104 105 #define IF_USE_MAIN_PATH 106 #define IF_USE_MAIN_PATH_2(x1, x2) 107 108 #endif // WIN_LONG_PATH 109 110 bool GetFullPath(CFSTR dirPrefix, CFSTR path, FString &fullPath); 111 bool GetFullPath(CFSTR path, FString &fullPath); 112 113 }}} 114 115 #endif 116