Home | History | Annotate | Download | only in Windows
      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