mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg/Bds: Introduced helper function to detect if an Ascii/Unicode string is printable
Some limitations: - it only supports unicode string that use ASCII character (< 0x100) - single character ASCII strings are interpreted as Unicode string - string cannot be longer than 2 x BOOT_DEVICE_OPTION_MAX (600 bytes) Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15455 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
6bcedcecb5
commit
135b09a2c2
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
*
|
||||
* Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
||||
* Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
|
||||
*
|
||||
* This program and the accompanying materials
|
||||
* are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -338,3 +338,79 @@ IsUnicodeString (
|
|||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to detect if the given string is an ASCII or Unicode string
|
||||
*
|
||||
* There are actually few limitation to this function but it is mainly to give
|
||||
* a user friendly output.
|
||||
*
|
||||
* Some limitations:
|
||||
* - it only supports unicode string that use ASCII character (< 0x100)
|
||||
* - single character ASCII strings are interpreted as Unicode string
|
||||
* - string cannot be longer than 2 x BOOT_DEVICE_OPTION_MAX (600 bytes)
|
||||
*
|
||||
* @param String Buffer that might contain a Unicode or Ascii string
|
||||
* @param IsUnicode If not NULL this boolean value returns if the string is an
|
||||
* ASCII or Unicode string.
|
||||
*/
|
||||
BOOLEAN
|
||||
IsPrintableString (
|
||||
IN VOID* String,
|
||||
OUT BOOLEAN *IsUnicode
|
||||
)
|
||||
{
|
||||
BOOLEAN UnicodeDetected;
|
||||
BOOLEAN IsPrintable;
|
||||
UINTN Index;
|
||||
CHAR16 Character;
|
||||
|
||||
// We do not support NULL pointer
|
||||
ASSERT (String != NULL);
|
||||
|
||||
// Test empty string
|
||||
if (*(CHAR16*)String == L'\0') {
|
||||
if (IsUnicode) {
|
||||
*IsUnicode = TRUE;
|
||||
}
|
||||
return TRUE;
|
||||
} else if (*(CHAR16*)String == '\0') {
|
||||
if (IsUnicode) {
|
||||
*IsUnicode = FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Limitation: if the string is an ASCII single character string. This comparison
|
||||
// will assume it is a Unicode string.
|
||||
if (*(CHAR16*)String < 0x100) {
|
||||
UnicodeDetected = TRUE;
|
||||
} else {
|
||||
UnicodeDetected = FALSE;
|
||||
}
|
||||
|
||||
IsPrintable = FALSE;
|
||||
for (Index = 0; Index < BOOT_DEVICE_OPTION_MAX * 2; Index++) {
|
||||
if (UnicodeDetected) {
|
||||
Character = ((CHAR16*)String)[Index];
|
||||
} else {
|
||||
Character = ((CHAR8*)String)[Index];
|
||||
}
|
||||
|
||||
if (Character == '\0') {
|
||||
// End of the string
|
||||
IsPrintable = TRUE;
|
||||
break;
|
||||
} else if ((Character < 0x20) || (Character > 0x7f)) {
|
||||
// We only support the range of printable ASCII character
|
||||
IsPrintable = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsPrintable && IsUnicode) {
|
||||
*IsUnicode = UnicodeDetected;
|
||||
}
|
||||
|
||||
return IsPrintable;
|
||||
}
|
||||
|
|
|
@ -257,4 +257,25 @@ IsUnicodeString (
|
|||
IN VOID* String
|
||||
);
|
||||
|
||||
/*
|
||||
* Try to detect if the given string is an ASCII or Unicode string
|
||||
*
|
||||
* There are actually few limitation to this function but it is mainly to give
|
||||
* a user friendly output.
|
||||
*
|
||||
* Some limitations:
|
||||
* - it only supports unicode string that use ASCII character (< 0x100)
|
||||
* - single character ASCII strings are interpreted as Unicode string
|
||||
* - string cannot be longer than 2 x BOOT_DEVICE_OPTION_MAX (600 bytes)
|
||||
*
|
||||
* @param String Buffer that might contain a Unicode or Ascii string
|
||||
* @param IsUnicode If not NULL this boolean value returns if the string is an
|
||||
* ASCII or Unicode string.
|
||||
*/
|
||||
BOOLEAN
|
||||
IsPrintableString (
|
||||
IN VOID* String,
|
||||
OUT BOOLEAN *IsUnicode
|
||||
);
|
||||
|
||||
#endif /* _BDSINTERNAL_H_ */
|
||||
|
|
Loading…
Reference in New Issue