diff options
| author | kx <kx@radix.pro> | 2024-06-04 06:43:08 +0300 |
|---|---|---|
| committer | kx <kx@radix.pro> | 2024-06-04 06:43:08 +0300 |
| commit | 7e2ccccace24636f29ddc210b94606abd4c7e42b (patch) | |
| tree | 545d43ea12671048956cafeb12303e84d601e571 /MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbSupportString.c | |
| parent | 27b044605cd5f6b33a3d231576003850b3fe305b (diff) | |
| download | edk2-trunk.tar.xz | |
Renormalized end-of-lines from master@27b044605cd5f6b33a3d231576003850b3fe305btrunk
Diffstat (limited to 'MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbSupportString.c')
| -rw-r--r-- | MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbSupportString.c | 2064 |
1 files changed, 1032 insertions, 1032 deletions
diff --git a/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbSupportString.c b/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbSupportString.c index e450e57662..67f3b8a99d 100644 --- a/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbSupportString.c +++ b/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbSupportString.c @@ -1,1032 +1,1032 @@ -/** @file
-
-Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-**/
-
-#include "Edb.h"
-
-/**
-
- Convert hex string to uint.
-
- @param Str - The string
-
-**/
-UINTN
-EFIAPI
-Xtoi (
- CHAR16 *Str
- )
-{
- UINTN RetVal;
- CHAR16 TempChar;
- UINTN MaxVal;
-
- ASSERT (Str != NULL);
-
- MaxVal = (UINTN)-1 >> 4;
- //
- // skip preceeding white space
- //
- while (*Str != '\0' && *Str == ' ') {
- Str += 1;
- }
-
- //
- // skip preceeding zeros
- //
- while (*Str != '\0' && *Str == '0') {
- Str += 1;
- }
-
- //
- // skip preceeding white space
- //
- if ((*Str != '\0') && ((*Str == 'x') || (*Str == 'X'))) {
- Str += 1;
- }
-
- //
- // convert hex digits
- //
- RetVal = 0;
- TempChar = *(Str++);
- while (TempChar != '\0') {
- if ((TempChar >= 'a') && (TempChar <= 'f')) {
- TempChar -= 'a' - 'A';
- }
-
- if (((TempChar >= '0') && (TempChar <= '9')) || ((TempChar >= 'A') && (TempChar <= 'F'))) {
- if (RetVal > MaxVal) {
- return (UINTN)-1;
- }
-
- RetVal = (RetVal << 4) | (TempChar - (TempChar >= 'A' ? 'A' - 10 : '0'));
- } else {
- break;
- }
-
- TempChar = *(Str++);
- }
-
- return RetVal;
-}
-
-/**
-
- Convert hex string to uint.
-
- @param Str - The string
-
-**/
-UINT64
-EFIAPI
-LXtoi (
- CHAR16 *Str
- )
-{
- UINT64 RetVal;
- CHAR16 TempChar;
- UINT64 MaxVal;
-
- ASSERT (Str != NULL);
-
- MaxVal = RShiftU64 ((UINT64)-1, 4);
- //
- // skip preceeding white space
- //
- while (*Str != '\0' && *Str == ' ') {
- Str += 1;
- }
-
- //
- // skip preceeding zeros
- //
- while (*Str != '\0' && *Str == '0') {
- Str += 1;
- }
-
- //
- // skip preceeding white space
- //
- if ((*Str != '\0') && ((*Str == 'x') || (*Str == 'X'))) {
- Str += 1;
- }
-
- //
- // convert hex digits
- //
- RetVal = 0;
- TempChar = *(Str++);
- while (TempChar != '\0') {
- if ((TempChar >= 'a') && (TempChar <= 'f')) {
- TempChar -= 'a' - 'A';
- }
-
- if (((TempChar >= '0') && (TempChar <= '9')) || ((TempChar >= 'A') && (TempChar <= 'F'))) {
- if (RetVal > MaxVal) {
- return (UINT64)-1;
- }
-
- RetVal = LShiftU64 (RetVal, 4);
- RetVal = RetVal + (TempChar - (TempChar >= 'A' ? 'A' - 10 : '0'));
- } else {
- break;
- }
-
- TempChar = *(Str++);
- }
-
- return RetVal;
-}
-
-/**
-
- Convert hex string to uint.
-
- @param Str - The string
-
-**/
-UINTN
-EFIAPI
-Atoi (
- CHAR16 *Str
- )
-{
- UINTN RetVal;
- CHAR16 TempChar;
- UINTN MaxVal;
- UINTN ResteVal;
-
- ASSERT (Str != NULL);
-
- MaxVal = (UINTN)-1 / 10;
- ResteVal = (UINTN)-1 % 10;
- //
- // skip preceeding white space
- //
- while (*Str != '\0' && *Str == ' ') {
- Str += 1;
- }
-
- //
- // convert digits
- //
- RetVal = 0;
- TempChar = *(Str++);
- while (TempChar != '\0') {
- if ((TempChar >= '0') && (TempChar <= '9')) {
- if ((RetVal > MaxVal) || ((RetVal == MaxVal) && (TempChar - '0' > (INTN)ResteVal))) {
- return (UINTN)-1;
- }
-
- RetVal = (RetVal * 10) + TempChar - '0';
- } else {
- break;
- }
-
- TempChar = *(Str++);
- }
-
- return RetVal;
-}
-
-/**
-
- Convert hex string to uint.
-
- @param Str - The string
-
-**/
-UINTN
-EFIAPI
-AsciiXtoi (
- CHAR8 *Str
- )
-{
- UINTN RetVal;
- CHAR8 TempChar;
- UINTN MaxVal;
-
- ASSERT (Str != NULL);
-
- MaxVal = (UINTN)-1 >> 4;
- //
- // skip preceeding white space
- //
- while (*Str != '\0' && *Str == ' ') {
- Str += 1;
- }
-
- //
- // skip preceeding zeros
- //
- while (*Str != '\0' && *Str == '0') {
- Str += 1;
- }
-
- //
- // skip preceeding white space
- //
- if ((*Str != '\0') && ((*Str == 'x') || (*Str == 'X'))) {
- Str += 1;
- }
-
- //
- // convert hex digits
- //
- RetVal = 0;
- TempChar = *(Str++);
- while (TempChar != '\0') {
- if ((TempChar >= 'a') && (TempChar <= 'f')) {
- TempChar -= 'a' - 'A';
- }
-
- if (((TempChar >= '0') && (TempChar <= '9')) || ((TempChar >= 'A') && (TempChar <= 'F'))) {
- if (RetVal > MaxVal) {
- return (UINTN)-1;
- }
-
- RetVal = (RetVal << 4) | (TempChar - (TempChar >= 'A' ? 'A' - 10 : '0'));
- } else {
- break;
- }
-
- TempChar = *(Str++);
- }
-
- return RetVal;
-}
-
-/**
-
- Convert hex string to uint.
-
- @param Str - The string
-
-**/
-UINTN
-EFIAPI
-AsciiAtoi (
- CHAR8 *Str
- )
-{
- UINTN RetVal;
- CHAR8 TempChar;
- UINTN MaxVal;
- UINTN ResteVal;
-
- ASSERT (Str != NULL);
-
- MaxVal = (UINTN)-1 / 10;
- ResteVal = (UINTN)-1 % 10;
- //
- // skip preceeding white space
- //
- while (*Str != '\0' && *Str == ' ') {
- Str += 1;
- }
-
- //
- // convert digits
- //
- RetVal = 0;
- TempChar = *(Str++);
- while (TempChar != '\0') {
- if ((TempChar >= '0') && (TempChar <= '9')) {
- if ((RetVal > MaxVal) || ((RetVal == MaxVal) && (TempChar - '0' > (INTN)ResteVal))) {
- return (UINTN)-1;
- }
-
- RetVal = (RetVal * 10) + TempChar - '0';
- } else {
- break;
- }
-
- TempChar = *(Str++);
- }
-
- return RetVal;
-}
-
-/**
- Compare the Unicode and Ascii string pointed by String to the string pointed by String2.
-
- @param String - Unicode String to process
-
- @param String2 - Ascii string to process
-
- @return Return a positive integer if String is lexicall greater than String2; Zero if
- the two strings are identical; and a negative interger if String is lexically
- less than String2.
-
-**/
-INTN
-EFIAPI
-StrCmpUnicodeAndAscii (
- IN CHAR16 *String,
- IN CHAR8 *String2
- )
-{
- while (*String != '\0') {
- if (*String != (CHAR16)*String2) {
- break;
- }
-
- String += 1;
- String2 += 1;
- }
-
- return (*String - (CHAR16)*String2);
-}
-
-/**
-
- Compare the Unicode string pointed by String to the string pointed by String2.
-
- @param String - Unicode String to process
- @param String2 - Unicode string to process
-
- @return Return a positive integer if String is lexically greater than String2; Zero if
- the two strings are identical; and a negative integer if String is lexically
- less than String2.
-
-**/
-INTN
-EFIAPI
-StriCmp (
- IN CHAR16 *String,
- IN CHAR16 *String2
- )
-{
- while ((*String != L'\0') &&
- (CharToUpper (*String) == CharToUpper (*String2)))
- {
- String++;
- String2++;
- }
-
- return CharToUpper (*String) - CharToUpper (*String2);
-}
-
-/**
-
- Compare the Unicode and Ascii string pointed by String to the string pointed by String2.
-
- @param String - Unicode String to process
- @param String2 - Ascii string to process
-
- @return Return a positive integer if String is lexically greater than String2; Zero if
- the two strings are identical; and a negative integer if String is lexically
- less than String2.
-
-**/
-INTN
-EFIAPI
-StriCmpUnicodeAndAscii (
- IN CHAR16 *String,
- IN CHAR8 *String2
- )
-{
- while ((*String != L'\0') &&
- (CharToUpper (*String) == (CHAR16)AsciiCharToUpper (*String2)))
- {
- String++;
- String2++;
- }
-
- return CharToUpper (*String) - (CHAR16)AsciiCharToUpper (*String2);
-}
-
-/**
-
- Verify if the string is end with the sub string.
-
- @param Str - The string where to search the sub string
- @param SubStr - The substring.
-
-**/
-BOOLEAN
-EFIAPI
-StrEndWith (
- IN CHAR16 *Str,
- IN CHAR16 *SubStr
- )
-{
- CHAR16 *Temp;
-
- if ((Str == NULL) || (SubStr == NULL) || (StrLen (Str) < StrLen (SubStr))) {
- return FALSE;
- }
-
- Temp = Str + StrLen (Str) - StrLen (SubStr);
-
- //
- // Compare
- //
- if (StriCmp (Temp, SubStr) == 0) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-/**
- Duplicate a string.
-
- @param Src The string to be duplicated.
-
-**/
-CHAR16 *
-EFIAPI
-StrDuplicate (
- IN CHAR16 *Src
- )
-{
- CHAR16 *Dest;
- UINTN Size;
-
- Size = (StrLen (Src) + 1) * sizeof (CHAR16);
- Dest = AllocateZeroPool (Size);
- if (Dest != NULL) {
- CopyMem (Dest, Src, Size);
- }
-
- return Dest;
-}
-
-CHAR16 *mLineBuffer = NULL;
-CHAR16 *mFieldBuffer = NULL;
-
-/**
-
- Find the first substring.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-UINTN
-EFIAPI
-StrSpn (
- IN CHAR16 *String,
- IN CHAR16 *CharSet
- )
-{
- UINTN Count;
- CHAR16 *Str1;
- CHAR16 *Str2;
-
- Count = 0;
-
- for (Str1 = String; *Str1 != L'\0'; Str1++) {
- for (Str2 = CharSet; *Str2 != L'\0'; Str2++) {
- if (*Str1 == *Str2) {
- break;
- }
- }
-
- if (*Str2 == L'\0') {
- return Count;
- }
-
- Count++;
- }
-
- return Count;
-}
-
-/**
-
- Searches a string for the first occurrence of a character contained in a
- specified buffer.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR16 *
-EFIAPI
-StrBrk (
- IN CHAR16 *String,
- IN CHAR16 *CharSet
- )
-{
- CHAR16 *Str1;
- CHAR16 *Str2;
-
- for (Str1 = String; *Str1 != L'\0'; Str1++) {
- for (Str2 = CharSet; *Str2 != L'\0'; Str2++) {
- if (*Str1 == *Str2) {
- return (CHAR16 *)Str1;
- }
- }
- }
-
- return NULL;
-}
-
-/**
-
- Find the next token after one or more specified characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR16 *
-EFIAPI
-StrTokenLine (
- IN CHAR16 *String OPTIONAL,
- IN CHAR16 *CharSet
- )
-{
- CHAR16 *Begin;
- CHAR16 *End;
-
- Begin = (String == NULL) ? mLineBuffer : String;
- if (Begin == NULL) {
- return NULL;
- }
-
- Begin += StrSpn (Begin, CharSet);
- if (*Begin == L'\0') {
- mLineBuffer = NULL;
- return NULL;
- }
-
- End = StrBrk (Begin, CharSet);
- if ((End != NULL) && (*End != L'\0')) {
- *End = L'\0';
- End++;
- }
-
- mLineBuffer = End;
- return Begin;
-}
-
-/**
-
- Find the next token after one specificed characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR16 *
-EFIAPI
-StrTokenField (
- IN CHAR16 *String OPTIONAL,
- IN CHAR16 *CharSet
- )
-{
- CHAR16 *Begin;
- CHAR16 *End;
-
- Begin = (String == NULL) ? mFieldBuffer : String;
- if (Begin == NULL) {
- return NULL;
- }
-
- if (*Begin == L'\0') {
- mFieldBuffer = NULL;
- return NULL;
- }
-
- End = StrBrk (Begin, CharSet);
- if ((End != NULL) && (*End != L'\0')) {
- *End = L'\0';
- End++;
- }
-
- mFieldBuffer = End;
- return Begin;
-}
-
-/**
-
- Find the next token after one or more specified characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR16 *
-EFIAPI
-StrGetNewTokenLine (
- IN CHAR16 *String,
- IN CHAR16 *CharSet
- )
-{
- return StrTokenLine (String, CharSet);
-}
-
-/**
-
- Find the next token after one or more specified characters.
-
- @param CharSet Point to the string to be found.
-
-**/
-CHAR16 *
-EFIAPI
-StrGetNextTokenLine (
- IN CHAR16 *CharSet
- )
-{
- return StrTokenLine (NULL, CharSet);
-}
-
-/**
-
- Find the next token after one specificed characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR16 *
-EFIAPI
-StrGetNewTokenField (
- IN CHAR16 *String,
- IN CHAR16 *CharSet
- )
-{
- return StrTokenField (String, CharSet);
-}
-
-/**
-
- Find the next token after one specificed characters.
-
- @param CharSet Point to the string to be found.
-
-**/
-CHAR16 *
-EFIAPI
-StrGetNextTokenField (
- IN CHAR16 *CharSet
- )
-{
- return StrTokenField (NULL, CharSet);
-}
-
-/**
-
- Patch a character to the end of a string.
-
- @param Buffer The string to be patched.
- @param Patch The patch character.
-
-**/
-VOID
-EFIAPI
-PatchForStrTokenAfter (
- IN CHAR16 *Buffer,
- IN CHAR16 Patch
- )
-{
- CHAR16 *Str;
-
- if (Buffer == NULL) {
- return;
- }
-
- Str = Buffer;
- while (*Str != 0) {
- Str++;
- }
-
- *Str = Patch;
-
- while (*(Str++) != '\0') {
- if (*Str == 0) {
- *Str = Patch;
- } else {
- break;
- }
- }
-
- return;
-}
-
-/**
- Patch a character at the beginning of a string.
-
- @param Buffer The string to be patched.
- @param Patch The patch character.
-
-**/
-VOID
-EFIAPI
-PatchForStrTokenBefore (
- IN CHAR16 *Buffer,
- IN CHAR16 Patch
- )
-{
- CHAR16 *Str;
-
- if (Buffer == NULL) {
- return;
- }
-
- Str = Buffer;
- while (*(Str--) != '\0') {
- if ((*Str == 0) || (*Str == Patch)) {
- *Str = Patch;
- } else {
- break;
- }
- }
-
- return;
-}
-
-CHAR8 *mAsciiLineBuffer = NULL;
-CHAR8 *mAsciiFieldBuffer = NULL;
-
-/**
-
- Find the first substring.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-UINTN
-EFIAPI
-AsciiStrSpn (
- IN CHAR8 *String,
- IN CHAR8 *CharSet
- )
-{
- UINTN Count;
- CHAR8 *Str1;
- CHAR8 *Str2;
-
- Count = 0;
-
- for (Str1 = String; *Str1 != '\0'; Str1++) {
- for (Str2 = CharSet; *Str2 != '\0'; Str2++) {
- if (*Str1 == *Str2) {
- break;
- }
- }
-
- if (*Str2 == '\0') {
- return Count;
- }
-
- Count++;
- }
-
- return Count;
-}
-
-/**
- Searches a string for the first occurrence of a character contained in a
- specified buffer.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrBrk (
- IN CHAR8 *String,
- IN CHAR8 *CharSet
- )
-{
- CHAR8 *Str1;
- CHAR8 *Str2;
-
- for (Str1 = String; *Str1 != '\0'; Str1++) {
- for (Str2 = CharSet; *Str2 != '\0'; Str2++) {
- if (*Str1 == *Str2) {
- return (CHAR8 *)Str1;
- }
- }
- }
-
- return NULL;
-}
-
-/**
-
- Find the next token after one or more specified characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrTokenLine (
- IN CHAR8 *String OPTIONAL,
- IN CHAR8 *CharSet
- )
-{
- CHAR8 *Begin;
- CHAR8 *End;
-
- Begin = (String == NULL) ? mAsciiLineBuffer : String;
- if (Begin == NULL) {
- return NULL;
- }
-
- Begin += AsciiStrSpn (Begin, CharSet);
- if (*Begin == '\0') {
- mAsciiLineBuffer = NULL;
- return NULL;
- }
-
- End = AsciiStrBrk (Begin, CharSet);
- if ((End != NULL) && (*End != '\0')) {
- *End = '\0';
- End++;
- }
-
- mAsciiLineBuffer = End;
- return Begin;
-}
-
-/**
-
- Find the next token after one specificed characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrTokenField (
- IN CHAR8 *String OPTIONAL,
- IN CHAR8 *CharSet
- )
-{
- CHAR8 *Begin;
- CHAR8 *End;
-
- Begin = (String == NULL) ? mAsciiFieldBuffer : String;
- if (Begin == NULL) {
- return NULL;
- }
-
- if (*Begin == '\0') {
- mAsciiFieldBuffer = NULL;
- return NULL;
- }
-
- End = AsciiStrBrk (Begin, CharSet);
- if ((End != NULL) && (*End != '\0')) {
- *End = '\0';
- End++;
- }
-
- mAsciiFieldBuffer = End;
- return Begin;
-}
-
-/**
-
- Find the next token after one or more specified characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrGetNewTokenLine (
- IN CHAR8 *String,
- IN CHAR8 *CharSet
- )
-{
- return AsciiStrTokenLine (String, CharSet);
-}
-
-/**
-
- Find the next token after one or more specified characters.
-
- @param CharSet Point to the string to be found.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrGetNextTokenLine (
- IN CHAR8 *CharSet
- )
-{
- return AsciiStrTokenLine (NULL, CharSet);
-}
-
-/**
-
- Find the next token after one specificed characters.
-
- @param String Point to the string where to find the substring.
- @param CharSet Point to the string to be found.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrGetNewTokenField (
- IN CHAR8 *String,
- IN CHAR8 *CharSet
- )
-{
- return AsciiStrTokenField (String, CharSet);
-}
-
-/**
-
- Find the next token after one specificed characters.
-
- @param CharSet Point to the string to be found.
-
-**/
-CHAR8 *
-EFIAPI
-AsciiStrGetNextTokenField (
- IN CHAR8 *CharSet
- )
-{
- return AsciiStrTokenField (NULL, CharSet);
-}
-
-/**
-
- Patch a character to the end of a string.
-
- @param Buffer The string to be patched.
- @param Patch The patch character.
-
-**/
-VOID
-EFIAPI
-PatchForAsciiStrTokenAfter (
- IN CHAR8 *Buffer,
- IN CHAR8 Patch
- )
-{
- CHAR8 *Str;
-
- if (Buffer == NULL) {
- return;
- }
-
- Str = Buffer;
- while (*Str != 0) {
- Str++;
- }
-
- *Str = Patch;
-
- while (*(Str++) != '\0') {
- if (*Str == 0) {
- *Str = Patch;
- } else {
- break;
- }
- }
-
- return;
-}
-
-/**
- Patch a character at the beginning of a string.
-
- @param Buffer The string to be patched.
- @param Patch The patch character.
-
-**/
-VOID
-EFIAPI
-PatchForAsciiStrTokenBefore (
- IN CHAR8 *Buffer,
- IN CHAR8 Patch
- )
-{
- CHAR8 *Str;
-
- if (Buffer == NULL) {
- return;
- }
-
- Str = Buffer;
- while (*(Str--) != '\0') {
- if ((*Str == 0) || (*Str == Patch)) {
- *Str = Patch;
- } else {
- break;
- }
- }
-
- return;
-}
+/** @file + +Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + + +**/ + +#include "Edb.h" + +/** + + Convert hex string to uint. + + @param Str - The string + +**/ +UINTN +EFIAPI +Xtoi ( + CHAR16 *Str + ) +{ + UINTN RetVal; + CHAR16 TempChar; + UINTN MaxVal; + + ASSERT (Str != NULL); + + MaxVal = (UINTN)-1 >> 4; + // + // skip preceeding white space + // + while (*Str != '\0' && *Str == ' ') { + Str += 1; + } + + // + // skip preceeding zeros + // + while (*Str != '\0' && *Str == '0') { + Str += 1; + } + + // + // skip preceeding white space + // + if ((*Str != '\0') && ((*Str == 'x') || (*Str == 'X'))) { + Str += 1; + } + + // + // convert hex digits + // + RetVal = 0; + TempChar = *(Str++); + while (TempChar != '\0') { + if ((TempChar >= 'a') && (TempChar <= 'f')) { + TempChar -= 'a' - 'A'; + } + + if (((TempChar >= '0') && (TempChar <= '9')) || ((TempChar >= 'A') && (TempChar <= 'F'))) { + if (RetVal > MaxVal) { + return (UINTN)-1; + } + + RetVal = (RetVal << 4) | (TempChar - (TempChar >= 'A' ? 'A' - 10 : '0')); + } else { + break; + } + + TempChar = *(Str++); + } + + return RetVal; +} + +/** + + Convert hex string to uint. + + @param Str - The string + +**/ +UINT64 +EFIAPI +LXtoi ( + CHAR16 *Str + ) +{ + UINT64 RetVal; + CHAR16 TempChar; + UINT64 MaxVal; + + ASSERT (Str != NULL); + + MaxVal = RShiftU64 ((UINT64)-1, 4); + // + // skip preceeding white space + // + while (*Str != '\0' && *Str == ' ') { + Str += 1; + } + + // + // skip preceeding zeros + // + while (*Str != '\0' && *Str == '0') { + Str += 1; + } + + // + // skip preceeding white space + // + if ((*Str != '\0') && ((*Str == 'x') || (*Str == 'X'))) { + Str += 1; + } + + // + // convert hex digits + // + RetVal = 0; + TempChar = *(Str++); + while (TempChar != '\0') { + if ((TempChar >= 'a') && (TempChar <= 'f')) { + TempChar -= 'a' - 'A'; + } + + if (((TempChar >= '0') && (TempChar <= '9')) || ((TempChar >= 'A') && (TempChar <= 'F'))) { + if (RetVal > MaxVal) { + return (UINT64)-1; + } + + RetVal = LShiftU64 (RetVal, 4); + RetVal = RetVal + (TempChar - (TempChar >= 'A' ? 'A' - 10 : '0')); + } else { + break; + } + + TempChar = *(Str++); + } + + return RetVal; +} + +/** + + Convert hex string to uint. + + @param Str - The string + +**/ +UINTN +EFIAPI +Atoi ( + CHAR16 *Str + ) +{ + UINTN RetVal; + CHAR16 TempChar; + UINTN MaxVal; + UINTN ResteVal; + + ASSERT (Str != NULL); + + MaxVal = (UINTN)-1 / 10; + ResteVal = (UINTN)-1 % 10; + // + // skip preceeding white space + // + while (*Str != '\0' && *Str == ' ') { + Str += 1; + } + + // + // convert digits + // + RetVal = 0; + TempChar = *(Str++); + while (TempChar != '\0') { + if ((TempChar >= '0') && (TempChar <= '9')) { + if ((RetVal > MaxVal) || ((RetVal == MaxVal) && (TempChar - '0' > (INTN)ResteVal))) { + return (UINTN)-1; + } + + RetVal = (RetVal * 10) + TempChar - '0'; + } else { + break; + } + + TempChar = *(Str++); + } + + return RetVal; +} + +/** + + Convert hex string to uint. + + @param Str - The string + +**/ +UINTN +EFIAPI +AsciiXtoi ( + CHAR8 *Str + ) +{ + UINTN RetVal; + CHAR8 TempChar; + UINTN MaxVal; + + ASSERT (Str != NULL); + + MaxVal = (UINTN)-1 >> 4; + // + // skip preceeding white space + // + while (*Str != '\0' && *Str == ' ') { + Str += 1; + } + + // + // skip preceeding zeros + // + while (*Str != '\0' && *Str == '0') { + Str += 1; + } + + // + // skip preceeding white space + // + if ((*Str != '\0') && ((*Str == 'x') || (*Str == 'X'))) { + Str += 1; + } + + // + // convert hex digits + // + RetVal = 0; + TempChar = *(Str++); + while (TempChar != '\0') { + if ((TempChar >= 'a') && (TempChar <= 'f')) { + TempChar -= 'a' - 'A'; + } + + if (((TempChar >= '0') && (TempChar <= '9')) || ((TempChar >= 'A') && (TempChar <= 'F'))) { + if (RetVal > MaxVal) { + return (UINTN)-1; + } + + RetVal = (RetVal << 4) | (TempChar - (TempChar >= 'A' ? 'A' - 10 : '0')); + } else { + break; + } + + TempChar = *(Str++); + } + + return RetVal; +} + +/** + + Convert hex string to uint. + + @param Str - The string + +**/ +UINTN +EFIAPI +AsciiAtoi ( + CHAR8 *Str + ) +{ + UINTN RetVal; + CHAR8 TempChar; + UINTN MaxVal; + UINTN ResteVal; + + ASSERT (Str != NULL); + + MaxVal = (UINTN)-1 / 10; + ResteVal = (UINTN)-1 % 10; + // + // skip preceeding white space + // + while (*Str != '\0' && *Str == ' ') { + Str += 1; + } + + // + // convert digits + // + RetVal = 0; + TempChar = *(Str++); + while (TempChar != '\0') { + if ((TempChar >= '0') && (TempChar <= '9')) { + if ((RetVal > MaxVal) || ((RetVal == MaxVal) && (TempChar - '0' > (INTN)ResteVal))) { + return (UINTN)-1; + } + + RetVal = (RetVal * 10) + TempChar - '0'; + } else { + break; + } + + TempChar = *(Str++); + } + + return RetVal; +} + +/** + Compare the Unicode and Ascii string pointed by String to the string pointed by String2. + + @param String - Unicode String to process + + @param String2 - Ascii string to process + + @return Return a positive integer if String is lexicall greater than String2; Zero if + the two strings are identical; and a negative interger if String is lexically + less than String2. + +**/ +INTN +EFIAPI +StrCmpUnicodeAndAscii ( + IN CHAR16 *String, + IN CHAR8 *String2 + ) +{ + while (*String != '\0') { + if (*String != (CHAR16)*String2) { + break; + } + + String += 1; + String2 += 1; + } + + return (*String - (CHAR16)*String2); +} + +/** + + Compare the Unicode string pointed by String to the string pointed by String2. + + @param String - Unicode String to process + @param String2 - Unicode string to process + + @return Return a positive integer if String is lexically greater than String2; Zero if + the two strings are identical; and a negative integer if String is lexically + less than String2. + +**/ +INTN +EFIAPI +StriCmp ( + IN CHAR16 *String, + IN CHAR16 *String2 + ) +{ + while ((*String != L'\0') && + (CharToUpper (*String) == CharToUpper (*String2))) + { + String++; + String2++; + } + + return CharToUpper (*String) - CharToUpper (*String2); +} + +/** + + Compare the Unicode and Ascii string pointed by String to the string pointed by String2. + + @param String - Unicode String to process + @param String2 - Ascii string to process + + @return Return a positive integer if String is lexically greater than String2; Zero if + the two strings are identical; and a negative integer if String is lexically + less than String2. + +**/ +INTN +EFIAPI +StriCmpUnicodeAndAscii ( + IN CHAR16 *String, + IN CHAR8 *String2 + ) +{ + while ((*String != L'\0') && + (CharToUpper (*String) == (CHAR16)AsciiCharToUpper (*String2))) + { + String++; + String2++; + } + + return CharToUpper (*String) - (CHAR16)AsciiCharToUpper (*String2); +} + +/** + + Verify if the string is end with the sub string. + + @param Str - The string where to search the sub string + @param SubStr - The substring. + +**/ +BOOLEAN +EFIAPI +StrEndWith ( + IN CHAR16 *Str, + IN CHAR16 *SubStr + ) +{ + CHAR16 *Temp; + + if ((Str == NULL) || (SubStr == NULL) || (StrLen (Str) < StrLen (SubStr))) { + return FALSE; + } + + Temp = Str + StrLen (Str) - StrLen (SubStr); + + // + // Compare + // + if (StriCmp (Temp, SubStr) == 0) { + return TRUE; + } else { + return FALSE; + } +} + +/** + Duplicate a string. + + @param Src The string to be duplicated. + +**/ +CHAR16 * +EFIAPI +StrDuplicate ( + IN CHAR16 *Src + ) +{ + CHAR16 *Dest; + UINTN Size; + + Size = (StrLen (Src) + 1) * sizeof (CHAR16); + Dest = AllocateZeroPool (Size); + if (Dest != NULL) { + CopyMem (Dest, Src, Size); + } + + return Dest; +} + +CHAR16 *mLineBuffer = NULL; +CHAR16 *mFieldBuffer = NULL; + +/** + + Find the first substring. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +UINTN +EFIAPI +StrSpn ( + IN CHAR16 *String, + IN CHAR16 *CharSet + ) +{ + UINTN Count; + CHAR16 *Str1; + CHAR16 *Str2; + + Count = 0; + + for (Str1 = String; *Str1 != L'\0'; Str1++) { + for (Str2 = CharSet; *Str2 != L'\0'; Str2++) { + if (*Str1 == *Str2) { + break; + } + } + + if (*Str2 == L'\0') { + return Count; + } + + Count++; + } + + return Count; +} + +/** + + Searches a string for the first occurrence of a character contained in a + specified buffer. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR16 * +EFIAPI +StrBrk ( + IN CHAR16 *String, + IN CHAR16 *CharSet + ) +{ + CHAR16 *Str1; + CHAR16 *Str2; + + for (Str1 = String; *Str1 != L'\0'; Str1++) { + for (Str2 = CharSet; *Str2 != L'\0'; Str2++) { + if (*Str1 == *Str2) { + return (CHAR16 *)Str1; + } + } + } + + return NULL; +} + +/** + + Find the next token after one or more specified characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR16 * +EFIAPI +StrTokenLine ( + IN CHAR16 *String OPTIONAL, + IN CHAR16 *CharSet + ) +{ + CHAR16 *Begin; + CHAR16 *End; + + Begin = (String == NULL) ? mLineBuffer : String; + if (Begin == NULL) { + return NULL; + } + + Begin += StrSpn (Begin, CharSet); + if (*Begin == L'\0') { + mLineBuffer = NULL; + return NULL; + } + + End = StrBrk (Begin, CharSet); + if ((End != NULL) && (*End != L'\0')) { + *End = L'\0'; + End++; + } + + mLineBuffer = End; + return Begin; +} + +/** + + Find the next token after one specificed characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR16 * +EFIAPI +StrTokenField ( + IN CHAR16 *String OPTIONAL, + IN CHAR16 *CharSet + ) +{ + CHAR16 *Begin; + CHAR16 *End; + + Begin = (String == NULL) ? mFieldBuffer : String; + if (Begin == NULL) { + return NULL; + } + + if (*Begin == L'\0') { + mFieldBuffer = NULL; + return NULL; + } + + End = StrBrk (Begin, CharSet); + if ((End != NULL) && (*End != L'\0')) { + *End = L'\0'; + End++; + } + + mFieldBuffer = End; + return Begin; +} + +/** + + Find the next token after one or more specified characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR16 * +EFIAPI +StrGetNewTokenLine ( + IN CHAR16 *String, + IN CHAR16 *CharSet + ) +{ + return StrTokenLine (String, CharSet); +} + +/** + + Find the next token after one or more specified characters. + + @param CharSet Point to the string to be found. + +**/ +CHAR16 * +EFIAPI +StrGetNextTokenLine ( + IN CHAR16 *CharSet + ) +{ + return StrTokenLine (NULL, CharSet); +} + +/** + + Find the next token after one specificed characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR16 * +EFIAPI +StrGetNewTokenField ( + IN CHAR16 *String, + IN CHAR16 *CharSet + ) +{ + return StrTokenField (String, CharSet); +} + +/** + + Find the next token after one specificed characters. + + @param CharSet Point to the string to be found. + +**/ +CHAR16 * +EFIAPI +StrGetNextTokenField ( + IN CHAR16 *CharSet + ) +{ + return StrTokenField (NULL, CharSet); +} + +/** + + Patch a character to the end of a string. + + @param Buffer The string to be patched. + @param Patch The patch character. + +**/ +VOID +EFIAPI +PatchForStrTokenAfter ( + IN CHAR16 *Buffer, + IN CHAR16 Patch + ) +{ + CHAR16 *Str; + + if (Buffer == NULL) { + return; + } + + Str = Buffer; + while (*Str != 0) { + Str++; + } + + *Str = Patch; + + while (*(Str++) != '\0') { + if (*Str == 0) { + *Str = Patch; + } else { + break; + } + } + + return; +} + +/** + Patch a character at the beginning of a string. + + @param Buffer The string to be patched. + @param Patch The patch character. + +**/ +VOID +EFIAPI +PatchForStrTokenBefore ( + IN CHAR16 *Buffer, + IN CHAR16 Patch + ) +{ + CHAR16 *Str; + + if (Buffer == NULL) { + return; + } + + Str = Buffer; + while (*(Str--) != '\0') { + if ((*Str == 0) || (*Str == Patch)) { + *Str = Patch; + } else { + break; + } + } + + return; +} + +CHAR8 *mAsciiLineBuffer = NULL; +CHAR8 *mAsciiFieldBuffer = NULL; + +/** + + Find the first substring. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +UINTN +EFIAPI +AsciiStrSpn ( + IN CHAR8 *String, + IN CHAR8 *CharSet + ) +{ + UINTN Count; + CHAR8 *Str1; + CHAR8 *Str2; + + Count = 0; + + for (Str1 = String; *Str1 != '\0'; Str1++) { + for (Str2 = CharSet; *Str2 != '\0'; Str2++) { + if (*Str1 == *Str2) { + break; + } + } + + if (*Str2 == '\0') { + return Count; + } + + Count++; + } + + return Count; +} + +/** + Searches a string for the first occurrence of a character contained in a + specified buffer. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR8 * +EFIAPI +AsciiStrBrk ( + IN CHAR8 *String, + IN CHAR8 *CharSet + ) +{ + CHAR8 *Str1; + CHAR8 *Str2; + + for (Str1 = String; *Str1 != '\0'; Str1++) { + for (Str2 = CharSet; *Str2 != '\0'; Str2++) { + if (*Str1 == *Str2) { + return (CHAR8 *)Str1; + } + } + } + + return NULL; +} + +/** + + Find the next token after one or more specified characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR8 * +EFIAPI +AsciiStrTokenLine ( + IN CHAR8 *String OPTIONAL, + IN CHAR8 *CharSet + ) +{ + CHAR8 *Begin; + CHAR8 *End; + + Begin = (String == NULL) ? mAsciiLineBuffer : String; + if (Begin == NULL) { + return NULL; + } + + Begin += AsciiStrSpn (Begin, CharSet); + if (*Begin == '\0') { + mAsciiLineBuffer = NULL; + return NULL; + } + + End = AsciiStrBrk (Begin, CharSet); + if ((End != NULL) && (*End != '\0')) { + *End = '\0'; + End++; + } + + mAsciiLineBuffer = End; + return Begin; +} + +/** + + Find the next token after one specificed characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR8 * +EFIAPI +AsciiStrTokenField ( + IN CHAR8 *String OPTIONAL, + IN CHAR8 *CharSet + ) +{ + CHAR8 *Begin; + CHAR8 *End; + + Begin = (String == NULL) ? mAsciiFieldBuffer : String; + if (Begin == NULL) { + return NULL; + } + + if (*Begin == '\0') { + mAsciiFieldBuffer = NULL; + return NULL; + } + + End = AsciiStrBrk (Begin, CharSet); + if ((End != NULL) && (*End != '\0')) { + *End = '\0'; + End++; + } + + mAsciiFieldBuffer = End; + return Begin; +} + +/** + + Find the next token after one or more specified characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR8 * +EFIAPI +AsciiStrGetNewTokenLine ( + IN CHAR8 *String, + IN CHAR8 *CharSet + ) +{ + return AsciiStrTokenLine (String, CharSet); +} + +/** + + Find the next token after one or more specified characters. + + @param CharSet Point to the string to be found. + +**/ +CHAR8 * +EFIAPI +AsciiStrGetNextTokenLine ( + IN CHAR8 *CharSet + ) +{ + return AsciiStrTokenLine (NULL, CharSet); +} + +/** + + Find the next token after one specificed characters. + + @param String Point to the string where to find the substring. + @param CharSet Point to the string to be found. + +**/ +CHAR8 * +EFIAPI +AsciiStrGetNewTokenField ( + IN CHAR8 *String, + IN CHAR8 *CharSet + ) +{ + return AsciiStrTokenField (String, CharSet); +} + +/** + + Find the next token after one specificed characters. + + @param CharSet Point to the string to be found. + +**/ +CHAR8 * +EFIAPI +AsciiStrGetNextTokenField ( + IN CHAR8 *CharSet + ) +{ + return AsciiStrTokenField (NULL, CharSet); +} + +/** + + Patch a character to the end of a string. + + @param Buffer The string to be patched. + @param Patch The patch character. + +**/ +VOID +EFIAPI +PatchForAsciiStrTokenAfter ( + IN CHAR8 *Buffer, + IN CHAR8 Patch + ) +{ + CHAR8 *Str; + + if (Buffer == NULL) { + return; + } + + Str = Buffer; + while (*Str != 0) { + Str++; + } + + *Str = Patch; + + while (*(Str++) != '\0') { + if (*Str == 0) { + *Str = Patch; + } else { + break; + } + } + + return; +} + +/** + Patch a character at the beginning of a string. + + @param Buffer The string to be patched. + @param Patch The patch character. + +**/ +VOID +EFIAPI +PatchForAsciiStrTokenBefore ( + IN CHAR8 *Buffer, + IN CHAR8 Patch + ) +{ + CHAR8 *Str; + + if (Buffer == NULL) { + return; + } + + Str = Buffer; + while (*(Str--) != '\0') { + if ((*Str == 0) || (*Str == Patch)) { + *Str = Patch; + } else { + break; + } + } + + return; +} |
