NT4/private/utils/uhpfs/inc/hpfsname.hxx
2020-09-30 17:12:29 +02:00

249 lines
3.0 KiB
C++

/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
hpfsname.hxx
Abstract:
The names used by HPFS volumes require knowledge of the
volume codepages, and must meet certain validity constraints.
The HPFS_NAME and HPFS_PATH objects encapsulate thes information.
Author:
Bill McJohn (billmc) 02-Jan-1991
--*/
#if !defined ( HPFS_NAME_DEFN )
#define HPFS_NAME_DEFN
#include "intstack.hxx"
//
// Forward references
//
DECLARE_CLASS( CASEMAP );
DECLARE_CLASS( HPFS_NAME );
DECLARE_CLASS( HPFS_PATH );
CONST PremappedCodepage = 0xff00;
CONST MaximumPathLength = 300;
CONST MaximumNameLength = 256;
enum NAME_COMPARE_RETURN {
NAME_IS_LESS_THAN, NAME_IS_EQUAL_TO, NAME_IS_GREATER_THAN
};
class HPFS_PATH : public OBJECT {
public:
DECLARE_CONSTRUCTOR( HPFS_PATH );
VIRTUAL
~HPFS_PATH(
);
NONVIRTUAL
BOOLEAN
Initialize(
);
NONVIRTUAL
BOOLEAN
AddLevel(
PHPFS_NAME Name
);
NONVIRTUAL
BOOLEAN
StripLevel(
);
NONVIRTUAL
PHPFS_NAME
QueryFirstLevel(
);
NONVIRTUAL
PHPFS_NAME
QueryNextLevel(
);
NONVIRTUAL
BOOLEAN
Copy(
PHPFS_PATH OtherPath
);
NONVIRTUAL
PCUCHAR
GetString(
) CONST;
NONVIRTUAL
BOOLEAN
IsRoot(
) CONST;
private:
NONVIRTUAL
VOID
Construct (
);
NONVIRTUAL
VOID
Destroy(
);
PBYTE _Buffer;
ULONG _CurrentLength;
ULONG _CurrentLevelIndex;
INTSTACK _ComponentOffsets;
};
INLINE
BOOLEAN
HPFS_PATH::IsRoot(
) CONST
/*++
Routine Description:
This method determines whether the path is to the root directory.
Arguments:
None.
Return Value:
TRUE if the path is the root (ie. is empty)
--*/
{
return( _CurrentLength == 0 );
}
class HPFS_NAME : public OBJECT {
public:
DECLARE_CONSTRUCTOR( HPFS_NAME );
VIRTUAL
~HPFS_NAME(
);
NONVIRTUAL
BOOLEAN
Initialize(
ULONG Length,
PUCHAR String,
ULONG VolumeCodepageIndex,
PCASEMAP Casemap
);
NONVIRTUAL
BOOLEAN
Initialize(
ULONG Length,
PUCHAR String
);
NONVIRTUAL
BOOLEAN
Initialize(
HPFS_NAME* OtherName
);
NONVIRTUAL
BOOLEAN
Swap(
PHPFS_NAME OtherName
);
NONVIRTUAL
BOOLEAN
IsNull(
);
NONVIRTUAL
BOOLEAN
IsValid(
PCASEMAP Casemap,
ULONG CodepageIndex
);
NONVIRTUAL
BOOLEAN
IsNewName(
PCASEMAP Casemap,
ULONG CodepageIndex
);
NONVIRTUAL
NAME_COMPARE_RETURN
CompareName(
PHPFS_NAME OtherName
);
NONVIRTUAL
NAME_COMPARE_RETURN
CompareName(
ULONG Length,
PUCHAR String,
ULONG VolumeCodepageIndex,
PCASEMAP Casemap
);
NONVIRTUAL
BOOLEAN
IsCodepageInvariant(
) CONST;
friend
BOOLEAN
HPFS_PATH::AddLevel(
PHPFS_NAME Name
);
NONVIRTUAL
PCUCHAR
GetString(
) CONST;
private:
NONVIRTUAL
VOID
Construct (
);
NONVIRTUAL
VOID
Destroy(
);
// _Buffer points at memory that is allocated by the object,
// and must be freed by it.
PBYTE _Buffer;
ULONG _BufferSize;
ULONG _Length;
};
#endif