Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+----------------------------------------------------------------------------
//
// File: cfilename.cpp
//
// Module: CMSETUP.LIB
//
// Synopsis: Implementation of the CFileNameParts Class
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author: quintinb Created Header 08/19/99
//
//+----------------------------------------------------------------------------
#include "cfilename.h"
CFileNameParts::CFileNameParts(LPCTSTR szFullPath) {
if (NULL == szFullPath) { CMASSERTMSG(FALSE, TEXT("NULL Input to CFileNameParts")); return; }
MYDBGASSERT(MAX_PATH >= lstrlen(szFullPath));
ZeroMemory(m_szFullPath, sizeof(m_szFullPath)); ZeroMemory(m_Drive, sizeof(m_Drive)); ZeroMemory(m_Dir, sizeof(m_Dir)); ZeroMemory(m_FileName, sizeof(m_FileName)); ZeroMemory(m_Extension, sizeof(m_Extension));
TCHAR* pszStart = m_szFullPath; const TCHAR* pszCurrentSource = szFullPath; TCHAR* pszLastSlash = NULL; TCHAR* pszColon = NULL; TCHAR* pszLastDot = NULL; TCHAR* pszCurrentDest = m_szFullPath;
//
// Copy szFullPath to m_szFullPath
//
lstrcpy(m_szFullPath, szFullPath);
while ((TEXT('\0') != *pszCurrentSource) && (MAX_PATH >= (pszCurrentSource - szFullPath))) { switch(*pszCurrentSource) { case TEXT(':'): //
// Found a colon, take the drive letter.
//
if ((NULL == pszColon) && (pszCurrentDest != m_szFullPath) && (m_szFullPath == CharPrev(m_szFullPath, pszCurrentDest))) { pszColon = pszCurrentDest; lstrcpyn(m_Drive, pszStart, (size_t)((pszCurrentDest - pszStart) + 2)); pszStart = CharNext(pszColon); } else { CMASSERTMSG(FALSE, TEXT("CFileNameParts -- Error, we only allow one colon in a path.")); return; } break;
case TEXT('\\'): case TEXT('/'): pszLastSlash = pszCurrentDest; break;
case TEXT('.'): pszLastDot = pszCurrentDest; break;
} pszCurrentSource = CharNext(pszCurrentSource); pszCurrentDest = CharNext(pszCurrentDest); }
if (pszLastSlash) { lstrcpyn(m_Dir, pszStart, (size_t)((pszLastSlash - pszStart) + 2)); pszStart = CharNext(pszLastSlash) ; }
if (pszLastDot && (pszLastDot > pszLastSlash)) { lstrcpyn(m_FileName, pszStart, (size_t)((pszLastDot - pszStart) + 1)); lstrcpyn(m_Extension, pszLastDot, _MAX_EXT+1); } else { //
// No extension
//
lstrcpyn(m_FileName, pszStart, _MAX_FNAME+1); } }
|