{
char *TempPtr;
char *NameString;
UINT32 SizeNeeded;
ACPI_FUNCTION_TRACE (ExAllocateNameString);
/* * Allow room for all \ and ^ prefixes, all segments and a MultiNamePrefix. * Also, one byte for the null terminator. * This may actually be somewhat longer than needed. */if (PrefixCount == ACPI_UINT32_MAX)
{
/* Special case for root */
SizeNeeded = 1 + (ACPI_NAME_SIZE * NumNameSegs) + 2 + 1;
}
else
{
SizeNeeded = PrefixCount + (ACPI_NAME_SIZE * NumNameSegs) + 2 + 1;
}
/* * Allocate a buffer for the name. * This buffer must be deleted by the caller! */
NameString = ACPI_ALLOCATE (SizeNeeded);
if (!NameString)
{
ACPI_ERROR ((AE_INFO,
"Could not allocate size %u", SizeNeeded));
return_PTR (NULL);
}
TempPtr = NameString;
/* Set up Root or Parent prefixes if needed */if (PrefixCount == ACPI_UINT32_MAX)
{
*TempPtr++ = AML_ROOT_PREFIX;
}
else
{
while (PrefixCount--)
{
*TempPtr++ = AML_PARENT_PREFIX;
}
}
/* Set up Dual or Multi prefixes if needed */if (NumNameSegs > 2)
{
/* Set up multi prefixes */
*TempPtr++ = AML_MULTI_NAME_PREFIX_OP;
*TempPtr++ = (char) NumNameSegs;
}
elseif (2 == NumNameSegs)
{
/* Set up dual prefixes */
*TempPtr++ = AML_DUAL_NAME_PREFIX;
}
/* * Terminate string following prefixes. AcpiExNameSegment() will * append the segment(s) */
*TempPtr = 0;
return_PTR (NameString);
}
Generated on Sat May 26 2012 05:20:47 for ReactOS by
1.7.6.1
ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.