249 lines
3.0 KiB
C++
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
|