// Windows/FileName.h | |
#ifndef __WINDOWS_FILE_NAME_H | |
#define __WINDOWS_FILE_NAME_H | |
#include "../Common/MyString.h" | |
namespace NWindows { | |
namespace NFile { | |
namespace NName { | |
int FindSepar(const wchar_t *s) throw(); | |
#ifndef USE_UNICODE_FSTRING | |
int FindSepar(const FChar *s) throw(); | |
#endif | |
void NormalizeDirPathPrefix(FString &dirPath); // ensures that it ended with '\\', if dirPath is not epmty | |
void NormalizeDirPathPrefix(UString &dirPath); | |
bool IsDrivePath(const wchar_t *s) throw(); // first 3 chars are drive chars like "a:\\" | |
bool IsAltPathPrefix(CFSTR s) throw(); /* name: */ | |
#if defined(_WIN32) && !defined(UNDER_CE) | |
extern const char * const kSuperPathPrefix; /* \\?\ */ | |
const unsigned kDevicePathPrefixSize = 4; | |
const unsigned kSuperPathPrefixSize = 4; | |
const unsigned kSuperUncPathPrefixSize = kSuperPathPrefixSize + 4; | |
bool IsDevicePath(CFSTR s) throw(); /* \\.\ */ | |
bool IsSuperUncPath(CFSTR s) throw(); /* \\?\UNC\ */ | |
bool IsNetworkPath(CFSTR s) throw(); /* \\?\UNC\ or \\SERVER */ | |
/* GetNetworkServerPrefixSize() returns size of server prefix: | |
\\?\UNC\SERVER\ | |
\\SERVER\ | |
in another cases it returns 0 | |
*/ | |
unsigned GetNetworkServerPrefixSize(CFSTR s) throw(); | |
bool IsNetworkShareRootPath(CFSTR s) throw(); /* \\?\UNC\SERVER\share or \\SERVER\share or with slash */ | |
bool IsDrivePath_SuperAllowed(CFSTR s) throw(); // first chars are drive chars like "a:\" or "\\?\a:\" | |
bool IsDriveRootPath_SuperAllowed(CFSTR s) throw(); // exact drive root path "a:\" or "\\?\a:\" | |
bool IsDrivePath2(const wchar_t *s) throw(); // first 2 chars are drive chars like "a:" | |
// bool IsDriveName2(const wchar_t *s) throw(); // is drive name like "a:" | |
bool IsSuperPath(const wchar_t *s) throw(); | |
bool IsSuperOrDevicePath(const wchar_t *s) throw(); | |
#ifndef USE_UNICODE_FSTRING | |
bool IsDrivePath2(CFSTR s) throw(); // first 2 chars are drive chars like "a:" | |
// bool IsDriveName2(CFSTR s) throw(); // is drive name like "a:" | |
bool IsDrivePath(CFSTR s) throw(); | |
bool IsSuperPath(CFSTR s) throw(); | |
bool IsSuperOrDevicePath(CFSTR s) throw(); | |
/* GetRootPrefixSize() returns size of ROOT PREFIX for cases: | |
\ | |
\\.\ | |
C:\ | |
\\?\C:\ | |
\\?\UNC\SERVER\Shared\ | |
\\SERVER\Shared\ | |
in another cases it returns 0 | |
*/ | |
unsigned GetRootPrefixSize(CFSTR s) throw(); | |
#endif | |
int FindAltStreamColon(CFSTR path) throw(); | |
#endif // _WIN32 | |
bool IsAbsolutePath(const wchar_t *s) throw(); | |
unsigned GetRootPrefixSize(const wchar_t *s) throw(); | |
#ifdef WIN_LONG_PATH | |
const int kSuperPathType_UseOnlyMain = 0; | |
const int kSuperPathType_UseOnlySuper = 1; | |
const int kSuperPathType_UseMainAndSuper = 2; | |
int GetUseSuperPathType(CFSTR s) throw(); | |
bool GetSuperPath(CFSTR path, UString &superPath, bool onlyIfNew); | |
bool GetSuperPaths(CFSTR s1, CFSTR s2, UString &d1, UString &d2, bool onlyIfNew); | |
#define USE_MAIN_PATH (__useSuperPathType != kSuperPathType_UseOnlySuper) | |
#define USE_MAIN_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlySuper && __useSuperPathType2 != kSuperPathType_UseOnlySuper) | |
#define USE_SUPER_PATH (__useSuperPathType != kSuperPathType_UseOnlyMain) | |
#define USE_SUPER_PATH_2 (__useSuperPathType1 != kSuperPathType_UseOnlyMain || __useSuperPathType2 != kSuperPathType_UseOnlyMain) | |
#define IF_USE_MAIN_PATH int __useSuperPathType = GetUseSuperPathType(path); if (USE_MAIN_PATH) | |
#define IF_USE_MAIN_PATH_2(x1, x2) \ | |
int __useSuperPathType1 = GetUseSuperPathType(x1); \ | |
int __useSuperPathType2 = GetUseSuperPathType(x2); \ | |
if (USE_MAIN_PATH_2) | |
#else | |
#define IF_USE_MAIN_PATH | |
#define IF_USE_MAIN_PATH_2(x1, x2) | |
#endif // WIN_LONG_PATH | |
bool GetFullPath(CFSTR dirPrefix, CFSTR path, FString &fullPath); | |
bool GetFullPath(CFSTR path, FString &fullPath); | |
}}} | |
#endif |