|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1998.
//
// File: DIRSTK.CXX
//
// Contents: Directory entry stack
//
// History: 07-Aug-92 KyleP Added header
//
//--------------------------------------------------------------------------
#include <pch.cxx>
#pragma hdrstop
#include <dirstk.hxx>
//+-------------------------------------------------------------------------
//
// Member: CDirStackEntry::CDirStackEntry
//
// Synopsis: CDirStackEntry constructor
//
// Arguments: [str] -- Unicode string (null terminated) for path
// [ccStr[ -- Size in chars of [str]
// [numHighValue] -- numerator's high watermark
// [numLowValue] -- numerator's low watermark
// [fDeep] -- TRUE for additional dir recursion
// [pwcsVRoot] -- Virtual root (or zero if none)
// [ccVRoot] -- Size in chars of [pwcsVRoot]
// [ccReplaceVRoot] -- Number of chars in phys root to replace
//
// History: 20-Jun-95 SitaramR Created
// 11-Feb-96 KyleP Add support for virtual roots
//
//--------------------------------------------------------------------------
CDirStackEntry::CDirStackEntry ( const CFunnyPath & funnyPath, ULONG numHighValue, ULONG numLowValue, BOOL fDeep, WCHAR const * pwcsVRoot, unsigned ccVRoot, unsigned ccReplacePRoot ) : _numHighValue( numHighValue ), _numLowValue( numLowValue ), _fDeep( fDeep ), _xwcsVirtualRoot( 0 ) { _funnyPath = funnyPath;
if ( 0 != pwcsVRoot ) { _ccVirtualRoot = ccVRoot; _ccReplacePhysRoot = ccReplacePRoot; _xwcsVirtualRoot.Set( new WCHAR[_ccVirtualRoot] ); RtlCopyMemory( _xwcsVirtualRoot.GetPointer(), pwcsVRoot, _ccVirtualRoot * sizeof(WCHAR) ); } }
CDirStackEntry::CDirStackEntry ( const WCHAR * pwcPath, unsigned ccStr, ULONG numHighValue, ULONG numLowValue, BOOL fDeep, WCHAR const * pwcsVRoot, unsigned ccVRoot, unsigned ccReplacePRoot ) : _numHighValue( numHighValue ), _numLowValue( numLowValue ), _fDeep( fDeep ), _xwcsVirtualRoot( 0 ) { _funnyPath.SetPath( pwcPath, ccStr );
if ( 0 != pwcsVRoot ) { _ccVirtualRoot = ccVRoot; _ccReplacePhysRoot = ccReplacePRoot; _xwcsVirtualRoot.Set( new WCHAR[_ccVirtualRoot] ); RtlCopyMemory( _xwcsVirtualRoot.GetPointer(), pwcsVRoot, _ccVirtualRoot * sizeof(WCHAR) ); } }
//+-------------------------------------------------------------------------
//
// Member: CDirStackEntry::CDirStackEntry
//
// Synopsis: CDirStackEntry constructor
//
// Arguments: [path] -- Nt string of path sans final directory name
// [name] -- Nt string of final directory name
// [numHighValue] -- numerator's high watermark
// [numLowValue] -- numerator's low watermark
// [fDeep] -- TRUE for additional dir recursion
// [pParent] -- Parent of this scope (for virtual root copy)
//
// History: 20-Jun-95 SitaramR Created
//
//--------------------------------------------------------------------------
CDirStackEntry::CDirStackEntry ( UNICODE_STRING const * path, UNICODE_STRING const * name, ULONG numHighValue, ULONG numLowValue, BOOL fDeep, CDirStackEntry * pParent ) : _numHighValue( numHighValue ), _numLowValue( numLowValue ), _fDeep( fDeep ), _xwcsVirtualRoot( 0 ) { //
// Copy physical path
//
WCHAR* pwcsActualFileName;
_funnyPath.SetPath( path->Buffer, path->Length/sizeof(WCHAR) ); _funnyPath.AppendBackSlash(); _funnyPath.AppendPath( name->Buffer, name->Length/sizeof(WCHAR) );
if ( 0 != pParent && 0 != pParent->GetVirtualRoot() ) { _ccVirtualRoot = pParent->VirtualRootLength(); _ccReplacePhysRoot = pParent->ReplaceLength();
_xwcsVirtualRoot.Set( new WCHAR[_ccVirtualRoot] ); RtlCopyMemory( _xwcsVirtualRoot.GetPointer(), pParent->GetVirtualRoot(), _ccVirtualRoot * sizeof(WCHAR) ); } }
|