From 16f738ecee689c6feb2acb7e4ef4d9bb4144ae7d Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Sun, 8 Jun 2008 11:04:43 +0200 Subject: Initial commit --- zip/ZipArchive/ZipPathComponent_lnx.cpp | 94 +++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 zip/ZipArchive/ZipPathComponent_lnx.cpp (limited to 'zip/ZipArchive/ZipPathComponent_lnx.cpp') diff --git a/zip/ZipArchive/ZipPathComponent_lnx.cpp b/zip/ZipArchive/ZipPathComponent_lnx.cpp new file mode 100644 index 0000000..b576a28 --- /dev/null +++ b/zip/ZipArchive/ZipPathComponent_lnx.cpp @@ -0,0 +1,94 @@ +//////////////////////////////////////////////////////////////////////////////// +// This source file is part of the ZipArchive library source distribution and +// is Copyrighted 2000 - 2007 by Artpol Software - Tadeusz Dracz +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// For the licensing details refer to the License.txt file. +// +// Web Site: http://www.artpol-software.com +//////////////////////////////////////////////////////////////////////////////// + +#include "_platform.h" + +#ifdef ZIP_ARCHIVE_LNX + +#include "stdafx.h" +#include "ZipPathComponent.h" + + +CZipPathComponent::~CZipPathComponent() +{ +} + +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); + } + + + +} + +CZipString CZipPathComponent::GetNoDrive() const +{ + CZipString szPath = m_szDirectory; + CZipString szFileName = GetFileName(); + if (!szFileName.IsEmpty() && !szPath.IsEmpty()) + szPath += m_cSeparator; + + szPath += szFileName; + return szPath; +} + +#endif // ZIP_ARCHIVE_LNX -- cgit v1.2.3