windows-nt/Source/XPSP1/NT/windows/winstate/v1/common/section.hxx
2020-09-26 16:20:57 +08:00

222 lines
5.2 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1998 - 1998.
//
// File: section.hxx
//
// Contents: CSection definition
//
// Classes: CSection
//
// Functions:
//
// History: 22-Sep-99 PhilipLa Created
//
//----------------------------------------------------------------------------
#ifndef __SECTION_HXX__
#define __SECTION_HXX__
#include "filelist.hxx"
class CSection
{
public:
inline CSection();
inline ~CSection();
inline const TCHAR * GetSectionTitle(void) const;
inline DWORD SetSectionTitle(const TCHAR *ptsName);
inline const TCHAR * GetSectionPath(void) const;
inline DWORD SetSectionPath(const TCHAR *ptsName);
inline DWORD GetSectionPathLength(void) const;
inline const TCHAR * GetSectionDest(void) const;
inline DWORD SetSectionDest(const TCHAR *ptsDest);
inline DWORD GetSectionDestLength(void) const;
inline DWORD SetName(const TCHAR *ptsName,
DWORD *pdwIndex,
BOOL fDeconstruct);
inline DWORD SetDestination(const TCHAR *ptsName, DWORD dwIndex);
inline ULONG GetNameCount(void) const;
inline const TCHAR * GetFullFileName(ULONG i) const;
inline const TCHAR * GetDestination(ULONG i) const;
inline void AddToList(CSection *pcsSection);
inline CSection * GetNextSection(void) const;
private:
TCHAR _tsSectionName[MAX_PATH + 1];
TCHAR _tsSectionPath[MAX_PATH + 1];
DWORD _dwSectionPathLength;
TCHAR _tsSectionDest[MAX_PATH + 1];
DWORD _dwSectionDestLength;
CFileList _cfl;
CSection *_pcsNext;
};
inline CSection::CSection()
{
_tsSectionName[0] = 0;
_tsSectionPath[0] = 0;
_tsSectionDest[0] = 0;
_dwSectionPathLength = 0;
_dwSectionDestLength = 0;
_pcsNext = NULL;
}
inline CSection::~CSection()
{
FreeFileList(_cfl.GetNextFileList());
}
inline const TCHAR * CSection::GetSectionTitle(void) const
{
return _tsSectionName;
}
inline DWORD CSection::SetSectionTitle(const TCHAR *ptsName)
{
DWORD dwLen = _tcslen(ptsName);
if (dwLen > MAX_PATH)
{
if (DebugOutput)
Win32Printf(LogFile, "Error: ptsName too long %s\r\n", ptsName);
return ERROR_FILENAME_EXCED_RANGE;
}
_tcscpy(_tsSectionName, ptsName);
//Go through some additional trickery to remove trailing backslashes,
//since the output .inf file uses a backslash as a line continuation
//character
if (_tsSectionName[dwLen - 1] == TEXT('\\'))
{
_tsSectionName[dwLen - 1] = 0;
}
return ERROR_SUCCESS;
}
inline const TCHAR * CSection::GetSectionPath(void) const
{
return _tsSectionPath;
}
inline DWORD CSection::SetSectionPath(const TCHAR *ptsName)
{
DWORD dwLen = _tcslen(ptsName);
if (dwLen > MAX_PATH)
{
if (DebugOutput)
Win32Printf(LogFile, "Error: ptsName too long %s\r\n", ptsName);
return ERROR_FILENAME_EXCED_RANGE;
}
_tcscpy(_tsSectionPath, ptsName);
_dwSectionPathLength = _tcslen(_tsSectionPath);
if (_tsSectionPath[_dwSectionPathLength - 1] == TEXT('\\'))
{
_tsSectionPath[_dwSectionPathLength - 1] = 0;
_dwSectionPathLength--;
}
return ERROR_SUCCESS;
}
inline DWORD CSection::GetSectionPathLength(void) const
{
return _dwSectionPathLength;
}
inline const TCHAR * CSection::GetSectionDest(void) const
{
return _tsSectionDest;
}
inline DWORD CSection::SetSectionDest(const TCHAR *ptsName)
{
DWORD dwLen = _tcslen(ptsName);
if (dwLen > MAX_PATH)
{
if (DebugOutput)
Win32Printf(LogFile, "Error: ptsName too long %s\r\n", ptsName);
return ERROR_FILENAME_EXCED_RANGE;
}
_tcscpy(_tsSectionDest, ptsName);
_dwSectionDestLength = _tcslen(_tsSectionDest);
if (_tsSectionDest[_dwSectionDestLength - 1] == TEXT('\\'))
{
_tsSectionDest[_dwSectionDestLength - 1] = 0;
_dwSectionDestLength--;
}
return ERROR_SUCCESS;
}
inline DWORD CSection::GetSectionDestLength(void) const
{
return _dwSectionDestLength;
}
inline DWORD CSection::SetName(const TCHAR *ptsName,
DWORD *pdwIndex,
BOOL fDeconstruct)
{
return _cfl.SetName(ptsName, pdwIndex, fDeconstruct);
}
inline DWORD CSection::SetDestination(const TCHAR *ptsName, DWORD dwIndex)
{
return _cfl.SetDestination(ptsName, dwIndex);
}
inline ULONG CSection::GetNameCount(void) const
{
return _cfl.GetNameCount();
}
inline const TCHAR * CSection::GetFullFileName(ULONG i) const
{
return _cfl.GetFullName(i);
}
inline const TCHAR * CSection::GetDestination(ULONG i) const
{
return _cfl.GetDestination(i);
}
inline void CSection::AddToList(CSection *pcsNew)
{
CSection *pcs = this;
while (pcs->_pcsNext != NULL)
{
pcs = pcs->_pcsNext;
}
pcs->_pcsNext = pcsNew;
}
inline CSection * CSection::GetNextSection(void) const
{
return _pcsNext;
}
inline void FreeSectionList(CSection *pcs)
{
CSection *pcsNext;
while (pcs != NULL)
{
pcsNext = pcs->GetNextSection();
delete pcs;
pcs = pcsNext;
}
}
#endif // #ifndef __SECTION_HXX__