void CZipPathComponent::SetFullPath(LPCTSTR lpszFullPath) { TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; TCHAR szFname[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; CZipString szTempPath(lpszFullPath); const CZipString szPrefix = _T("\\\\?\\unc\\"); int i = -1, iLen = szPrefix.GetLength(); if (iLen > szTempPath.GetLength()) iLen = szTempPath.GetLength(); CZipString szPossiblePrefix = szTempPath.Left(iLen); szPossiblePrefix.MakeLower(); // must perform case insensitive comparison while (++i < iLen && szPossiblePrefix[i] == szPrefix[i]); if (i == 2 || i == 4 || i == 8) // unc path, unicode path or unc path meeting windows file name conventions { m_szPrefix = szTempPath.Left(i); szTempPath = szTempPath.Mid(i); } else m_szPrefix.Empty(); _tsplitpath(szTempPath, szDrive , szDir, szFname, szExt); m_szDrive = szDrive; m_szDirectory = szDir; m_szDirectory.TrimLeft(m_cSeparator); m_szDirectory.TrimRight(m_cSeparator); SetExtension(szExt); m_szFileTitle = szFname; }
void CZipPathComponent::SetFullPath(LPCTSTR lpszFullPath) { CZipString szTempPath(lpszFullPath); const CZipString szPrefix = _T("\\\\?\\unc\\"); int i = -1, iLen = szPrefix.GetLength(); if (iLen > szTempPath.GetLength()) iLen = szTempPath.GetLength(); CZipString szPossiblePrefix = szTempPath.Left(iLen); szPossiblePrefix.MakeLower(); // must perform case insensitive comparison while (++i < iLen && szPossiblePrefix[i] == szPrefix[i]); if (i == 2 || i == 4 || i == 8) // unc path, Unicode path or unc path meeting windows file name conventions { m_szPrefix = szTempPath.Left(i); szTempPath = szTempPath.Mid(i); } else m_szPrefix.Empty(); m_szDrive.Empty(); m_szFileTitle.Empty(); m_szDirectory.Empty(); m_szFileExt.Empty(); int p; for (p = szTempPath.GetLength() - 1; p >= 0; p--) if (szTempPath[p] == m_cSeparator) break; if (p != -1) { m_szDirectory = szTempPath.Left(p); if (p == szTempPath.GetLength() - 1 ) return; // no filename present else p++; } else p = 0; // p points at the beginning of the filename m_szFileTitle = szTempPath.Mid(p); for (p = m_szFileTitle.GetLength() - 1; p >= 0; p--) if (m_szFileTitle[p] == _T('.')) break; if (p != -1) { m_szFileExt = m_szFileTitle.Mid(p+1); m_szFileTitle = m_szFileTitle.Left(p); } }
int CZipPathComponent::IsPrefixed(const CZipString& path) { int i = -1, iLen = PathPrefix.GetLength(); int pathLen = path.GetLength(); if (iLen > pathLen) iLen = pathLen; CZipString szPossiblePrefix = path.Left(iLen); szPossiblePrefix.MakeLower(); // must perform case insensitive comparison while (++i < iLen && szPossiblePrefix[i] == PathPrefix[i]); return i; }
bool CWildcard::IsMatch(LPCTSTR lpszText, int *iRetCode) { CZipString sz; if (!m_bCaseSensitive) { sz = lpszText; sz.MakeLower(); lpszText = (LPCTSTR)sz; } int i = Match((LPCTSTR)m_szPattern, lpszText); if (iRetCode) *iRetCode = i; return i == matchValid; }