Add %U XTOS extension for UUID/GUID string argument support
This commit is contained in:
parent
edd18b1dea
commit
00cca9a1c1
@ -312,6 +312,12 @@ XTSTATUS
|
|||||||
RtlpWriteWideCharacter(IN PRTL_PRINT_CONTEXT Context,
|
RtlpWriteWideCharacter(IN PRTL_PRINT_CONTEXT Context,
|
||||||
IN WCHAR Character);
|
IN WCHAR Character);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlpWriteWideStringCustomValue(IN PRTL_PRINT_CONTEXT Context,
|
||||||
|
IN PCWSTR Format,
|
||||||
|
IN ...);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
XTSTATUS
|
XTSTATUS
|
||||||
RtlpWriteWideStringIntegerValue(IN PRTL_PRINT_CONTEXT Context,
|
RtlpWriteWideStringIntegerValue(IN PRTL_PRINT_CONTEXT Context,
|
||||||
|
@ -523,6 +523,7 @@ RtlpFormatWideStringArgumentSpecifier(IN PRTL_PRINT_CONTEXT Context,
|
|||||||
PWCHAR WideStrArg;
|
PWCHAR WideStrArg;
|
||||||
ULONGLONG IntArg;
|
ULONGLONG IntArg;
|
||||||
XTSTATUS Status;
|
XTSTATUS Status;
|
||||||
|
PGUID GuidArg;
|
||||||
PCHAR StrArg;
|
PCHAR StrArg;
|
||||||
CHAR CharArg;
|
CHAR CharArg;
|
||||||
|
|
||||||
@ -876,6 +877,10 @@ RtlpFormatWideStringArgumentSpecifier(IN PRTL_PRINT_CONTEXT Context,
|
|||||||
FormatProperties.VariableType = Integer;
|
FormatProperties.VariableType = Integer;
|
||||||
FormatProperties.Radix = 10;
|
FormatProperties.Radix = 10;
|
||||||
break;
|
break;
|
||||||
|
case L'U':
|
||||||
|
/* XTOS extension: UUID/GUID argument */
|
||||||
|
FormatProperties.VariableType = Guid;
|
||||||
|
break;
|
||||||
case L'x':
|
case L'x':
|
||||||
/* Unsigned integer argument as hexadecimal number (lowercase) */
|
/* Unsigned integer argument as hexadecimal number (lowercase) */
|
||||||
FormatProperties.VariableType = Integer;
|
FormatProperties.VariableType = Integer;
|
||||||
@ -938,6 +943,32 @@ RtlpFormatWideStringArgumentSpecifier(IN PRTL_PRINT_CONTEXT Context,
|
|||||||
/* Write formatted boolean string */
|
/* Write formatted boolean string */
|
||||||
Status = RtlpWriteWideStringValue(Context, &FormatProperties, WideStrArg, RtlWideStringLength(WideStrArg, 0));
|
Status = RtlpWriteWideStringValue(Context, &FormatProperties, WideStrArg, RtlWideStringLength(WideStrArg, 0));
|
||||||
}
|
}
|
||||||
|
else if(FormatProperties.VariableType == Guid)
|
||||||
|
{
|
||||||
|
/* GUID type */
|
||||||
|
if(ArgPosition != 0)
|
||||||
|
{
|
||||||
|
/* Get argument value from specified argument position */
|
||||||
|
IntArg = RtlpGetWideStringArgument(&ArgumentsCopy, ArgPosition, sizeof(PGUID));
|
||||||
|
GuidArg = (PGUID)(UINT_PTR)IntArg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Get argument value from the next argument */
|
||||||
|
GuidArg = VA_ARG(*ArgumentList, PGUID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure GUID is not NULL */
|
||||||
|
if(GuidArg != NULL)
|
||||||
|
{
|
||||||
|
/* Write formatted GUID string */
|
||||||
|
Status = RtlpWriteWideStringCustomValue(Context, L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||||
|
GuidArg->Data1, GuidArg->Data2, GuidArg->Data3,
|
||||||
|
GuidArg->Data4[0], GuidArg->Data4[1], GuidArg->Data4[2],
|
||||||
|
GuidArg->Data4[3], GuidArg->Data4[4], GuidArg->Data4[5],
|
||||||
|
GuidArg->Data4[6], GuidArg->Data4[7]);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(FormatProperties.VariableType == Char)
|
else if(FormatProperties.VariableType == Char)
|
||||||
{
|
{
|
||||||
/* Character type */
|
/* Character type */
|
||||||
@ -1273,6 +1304,44 @@ RtlpWriteWideCharacter(IN PRTL_PRINT_CONTEXT Context,
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes a wide string custom-formatted value to the destination provided by the print context.
|
||||||
|
*
|
||||||
|
* @param Context
|
||||||
|
* Supplies a pointer to the print context structure.
|
||||||
|
*
|
||||||
|
* @param Format
|
||||||
|
* Supplies a pointer to the printf-alike format string.
|
||||||
|
*
|
||||||
|
* @param ...
|
||||||
|
* Depending on the format string, this routine might expect a sequence of additional arguments.
|
||||||
|
*
|
||||||
|
* @return This routine returns a status code.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTAPI
|
||||||
|
XTSTATUS
|
||||||
|
RtlpWriteWideStringCustomValue(IN PRTL_PRINT_CONTEXT Context,
|
||||||
|
IN PCWSTR Format,
|
||||||
|
IN ...)
|
||||||
|
{
|
||||||
|
VA_LIST Arguments;
|
||||||
|
XTSTATUS Status;
|
||||||
|
|
||||||
|
/* Initialise the va_list */
|
||||||
|
VA_START(Arguments, Format);
|
||||||
|
|
||||||
|
/* Format and print the string to the desired output */
|
||||||
|
Status = RtlFormatWideString(Context, Format, Arguments);
|
||||||
|
|
||||||
|
/* Clean up the va_list */
|
||||||
|
VA_END(Arguments);
|
||||||
|
|
||||||
|
/* Return status code */
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes a wide string integer value to the destination provided by the print context.
|
* Writes a wide string integer value to the destination provided by the print context.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user