STDMETHODIMP CFSFolder::Clone(IFolderFolder **resultFolder) { CFSFolder *fsFolderSpec = new CFSFolder; CMyComPtr<IFolderFolder> folderNew = fsFolderSpec; fsFolderSpec->Init(_path, 0); *resultFolder = folderNew.Detach(); return S_OK; }
HRESULT CFSFolder::BindToFolderSpec(const wchar_t *name, IFolderFolder **resultFolder) { *resultFolder = 0; CFSFolder *folderSpec = new CFSFolder; CMyComPtr<IFolderFolder> subFolder = folderSpec; RINOK(folderSpec->Init(_path + name + UString(WCHAR_PATH_SEPARATOR), 0)); *resultFolder = subFolder.Detach(); return S_OK; }
HRESULT CFSFolder::BindToFolderSpec(CFSTR name, IFolderFolder **resultFolder) { *resultFolder = 0; CFSFolder *folderSpec = new CFSFolder; CMyComPtr<IFolderFolder> subFolder = folderSpec; RINOK(folderSpec->Init(_path + name + FCHAR_PATH_SEPARATOR)); *resultFolder = subFolder.Detach(); return S_OK; }
STDMETHODIMP CFSFolder::BindToParentFolder(IFolderFolder **resultFolder) { *resultFolder = 0; if (_parentFolder) { CMyComPtr<IFolderFolder> parentFolder = _parentFolder; *resultFolder = parentFolder.Detach(); return S_OK; } if (_path.IsEmpty()) return E_INVALIDARG; int pos = _path.ReverseFind(WCHAR_PATH_SEPARATOR); if (pos < 0 || pos != _path.Length() - 1) return E_FAIL; UString parentPath = _path.Left(pos); pos = parentPath.ReverseFind(WCHAR_PATH_SEPARATOR); if (pos < 0) { #ifdef UNDER_CE *resultFolder = 0; #else CFSDrives *drivesFolderSpec = new CFSDrives; CMyComPtr<IFolderFolder> drivesFolder = drivesFolderSpec; drivesFolderSpec->Init(); *resultFolder = drivesFolder.Detach(); #endif return S_OK; } UString parentPathReduced = parentPath.Left(pos); parentPath = parentPath.Left(pos + 1); #ifndef UNDER_CE pos = parentPathReduced.ReverseFind(WCHAR_PATH_SEPARATOR); if (pos == 1) { if (parentPath[0] != WCHAR_PATH_SEPARATOR) return E_FAIL; CNetFolder *netFolderSpec = new CNetFolder; CMyComPtr<IFolderFolder> netFolder = netFolderSpec; netFolderSpec->Init(parentPath); *resultFolder = netFolder.Detach(); return S_OK; } #endif CFSFolder *parentFolderSpec = new CFSFolder; CMyComPtr<IFolderFolder> parentFolder = parentFolderSpec; RINOK(parentFolderSpec->Init(parentPath, 0)); *resultFolder = parentFolder.Detach(); return S_OK; }
STDMETHODIMP CFSFolder::BindToParentFolder(IFolderFolder **resultFolder) { *resultFolder = 0; if (_parentFolder) { CMyComPtr<IFolderFolder> parentFolder = _parentFolder; *resultFolder = parentFolder.Detach(); return S_OK; } if (_path.IsEmpty()) return E_INVALIDARG; printf("CFSFolder::BindToParentFolder path='%ls'\n",(const wchar_t *)_path); int pos = _path.ReverseFind(WCHAR_PATH_SEPARATOR); if (pos < 0 || pos != _path.Length() - 1) return E_FAIL; UString parentPath = _path.Left(pos); printf("CFSFolder::BindToParentFolder parentPath='%ls'\n",(const wchar_t *)parentPath); pos = parentPath.ReverseFind(WCHAR_PATH_SEPARATOR); if (pos < 0) { #ifdef _WIN32 parentPath.Empty(); CFSDrives *drivesFolderSpec = new CFSDrives; CMyComPtr<IFolderFolder> drivesFolder = drivesFolderSpec; drivesFolderSpec->Init(); *resultFolder = drivesFolder.Detach(); #else parentPath = WSTRING_PATH_SEPARATOR; CFSFolder *parentFolderSpec = new CFSFolder; CMyComPtr<IFolderFolder> parentFolder = parentFolderSpec; printf("CFSFolder::BindToParentFolder Init-0 with parentPath='%ls'\n",(const wchar_t *)parentPath); RINOK(parentFolderSpec->Init(parentPath, 0)); *resultFolder = parentFolder.Detach(); #endif return S_OK; } UString parentPathReduced = parentPath.Left(pos); parentPath = parentPath.Left(pos + 1); pos = parentPathReduced.ReverseFind(WCHAR_PATH_SEPARATOR); if (pos == 1) { #ifdef _WIN32 if (parentPath[0] != WCHAR_PATH_SEPARATOR) return E_FAIL; CNetFolder *netFolderSpec = new CNetFolder; CMyComPtr<IFolderFolder> netFolder = netFolderSpec; netFolderSpec->Init(parentPath); *resultFolder = netFolder.Detach(); #else parentPath = WSTRING_PATH_SEPARATOR; CFSFolder *parentFolderSpec = new CFSFolder; CMyComPtr<IFolderFolder> parentFolder = parentFolderSpec; printf("CFSFolder::BindToParentFolder Init-1 with parentPath='%ls'\n",(const wchar_t *)parentPath); RINOK(parentFolderSpec->Init(parentPath, 0)); *resultFolder = parentFolder.Detach(); #endif // ifdef _WIN32 return S_OK; } CFSFolder *parentFolderSpec = new CFSFolder; CMyComPtr<IFolderFolder> parentFolder = parentFolderSpec; printf("CFSFolder::BindToParentFolder Init-2 with parentPath='%ls'\n",(const wchar_t *)parentPath); RINOK(parentFolderSpec->Init(parentPath, 0)); *resultFolder = parentFolder.Detach(); return S_OK; }
STDMETHODIMP CFSFolder::BindToParentFolder(IFolderFolder **resultFolder) { *resultFolder = 0; /* if (_parentFolder) { CMyComPtr<IFolderFolder> parentFolder = _parentFolder; *resultFolder = parentFolder.Detach(); return S_OK; } */ if (_path.IsEmpty()) return E_INVALIDARG; #ifndef UNDER_CE if (IsDriveRootPath_SuperAllowed(_path)) { CFSDrives *drivesFolderSpec = new CFSDrives; CMyComPtr<IFolderFolder> drivesFolder = drivesFolderSpec; drivesFolderSpec->Init(false, IsSuperPath(_path)); *resultFolder = drivesFolder.Detach(); return S_OK; } int pos = _path.ReverseFind_PathSepar(); if (pos < 0 || pos != (int)_path.Len() - 1) return E_FAIL; FString parentPath = _path.Left(pos); pos = parentPath.ReverseFind_PathSepar(); parentPath.DeleteFrom(pos + 1); if (NName::IsDrivePath_SuperAllowed(parentPath)) { CFSFolder *parentFolderSpec = new CFSFolder; CMyComPtr<IFolderFolder> parentFolder = parentFolderSpec; if (parentFolderSpec->Init(parentPath) == S_OK) { *resultFolder = parentFolder.Detach(); return S_OK; } } /* FString parentPathReduced = parentPath.Left(pos); pos = parentPathReduced.ReverseFind_PathSepar(); if (pos == 1) { if (!IS_PATH_SEPAR_CHAR(parentPath[0])) return E_FAIL; CNetFolder *netFolderSpec = new CNetFolder; CMyComPtr<IFolderFolder> netFolder = netFolderSpec; netFolderSpec->Init(fs2us(parentPath)); *resultFolder = netFolder.Detach(); return S_OK; } */ #endif return S_OK; }