36 ASSERT (String !=
NULL);
37 ASSERT (((
UINTN)String & BIT0) == 0);
39 for (Length = 0; *String != L
'\0'; String++, Length++) {
44 if (
PcdGet32 (PcdMaximumUnicodeStringLength) != 0) {
45 ASSERT (Length <
PcdGet32 (PcdMaximumUnicodeStringLength));
76 return (
StrLen (String) + 1) *
sizeof (*String);
117 ASSERT (
StrSize (FirstString) != 0);
118 ASSERT (
StrSize (SecondString) != 0);
120 while ((*FirstString != L
'\0') && (*FirstString == *SecondString)) {
125 return *FirstString - *SecondString;
176 ASSERT (
StrSize (FirstString) != 0);
177 ASSERT (
StrSize (SecondString) != 0);
179 if (
PcdGet32 (PcdMaximumUnicodeStringLength) != 0) {
180 ASSERT (Length <=
PcdGet32 (PcdMaximumUnicodeStringLength));
183 while ((*FirstString != L
'\0') &&
184 (*SecondString != L
'\0') &&
185 (*FirstString == *SecondString) &&
193 return *FirstString - *SecondString;
229 CONST CHAR16 *FirstMatch;
230 CONST CHAR16 *SearchStringTmp;
236 ASSERT (
StrSize (String) != 0);
237 ASSERT (
StrSize (SearchString) != 0);
239 if (*SearchString == L
'\0') {
240 return (CHAR16 *)String;
243 while (*String != L
'\0') {
244 SearchStringTmp = SearchString;
247 while ( (*String == *SearchStringTmp)
248 && (*String != L
'\0'))
254 if (*SearchStringTmp == L
'\0') {
255 return (CHAR16 *)FirstMatch;
258 if (*String == L
'\0') {
262 String = FirstMatch + 1;
287 return (BOOLEAN)(Char >= L
'0' && Char <= L
'9');
311 if ((Char >= L
'a') && (Char <= L
'z')) {
312 return (CHAR16)(Char - (L
'a' - L
'A'));
365 (Char >= L
'A' && Char <= L
'F') ||
366 (Char >= L
'a' && Char <= L
'f'));
410 RETURN_STATUS Status;
461 RETURN_STATUS Status;
513 RETURN_STATUS Status;
565 RETURN_STATUS Status;
594 return (BOOLEAN)(Char >=
'0' && Char <=
'9');
618 (Char >=
'A' && Char <=
'F') ||
619 (Char >=
'a' && Char <=
'f'));
647 ASSERT (String !=
NULL);
649 for (Length = 0; *String !=
'\0'; String++, Length++) {
654 if (
PcdGet32 (PcdMaximumAsciiStringLength) != 0) {
655 ASSERT (Length <
PcdGet32 (PcdMaximumAsciiStringLength));
685 return (
AsciiStrLen (String) + 1) *
sizeof (*String);
727 while ((*FirstString !=
'\0') && (*FirstString == *SecondString)) {
732 return *FirstString - *SecondString;
754 return (UINT8)((Chr >=
'a' && Chr <=
'z') ? Chr - (
'a' -
'A') : Chr);
819 CHAR8 UpperFirstString;
820 CHAR8 UpperSecondString;
830 while ((*FirstString !=
'\0') && (*SecondString !=
'\0') && (UpperFirstString == UpperSecondString)) {
837 return UpperFirstString - UpperSecondString;
888 if (
PcdGet32 (PcdMaximumAsciiStringLength) != 0) {
889 ASSERT (Length <=
PcdGet32 (PcdMaximumAsciiStringLength));
892 while ((*FirstString !=
'\0') &&
893 (*SecondString !=
'\0') &&
894 (*FirstString == *SecondString) &&
902 return *FirstString - *SecondString;
936 CONST CHAR8 *FirstMatch;
937 CONST CHAR8 *SearchStringTmp;
945 if (*SearchString ==
'\0') {
946 return (CHAR8 *)String;
949 while (*String !=
'\0') {
950 SearchStringTmp = SearchString;
953 while ( (*String == *SearchStringTmp)
954 && (*String !=
'\0'))
960 if (*SearchStringTmp ==
'\0') {
961 return (CHAR8 *)FirstMatch;
964 if (*String ==
'\0') {
968 String = FirstMatch + 1;
1011 RETURN_STATUS Status;
1058 RETURN_STATUS Status;
1109 RETURN_STATUS Status;
1160 RETURN_STATUS Status;
1170STATIC CHAR8 EncodingTable[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1171 "abcdefghijklmnopqrstuvwxyz"
1198 OUT CHAR8 *Destination OPTIONAL,
1208 if ((Source ==
NULL) || (DestinationSize ==
NULL)) {
1215 if (SourceLength == 0) {
1216 if (*DestinationSize < 1) {
1217 *DestinationSize = 1;
1221 *DestinationSize = 1;
1222 *Destination =
'\0';
1236 RequiredSize = ((SourceLength + 2) / 3) * 4 + 1;
1237 if ((Destination ==
NULL) || (*DestinationSize < RequiredSize)) {
1238 *DestinationSize = RequiredSize;
1242 Left = SourceLength;
1248 *Destination++ = EncodingTable[(Source[0] & 0xfc) >> 2];
1249 *Destination++ = EncodingTable[((Source[0] & 0x03) << 4) + ((Source[1] & 0xf0) >> 4)];
1250 *Destination++ = EncodingTable[((Source[1] & 0x0f) << 2) + ((Source[2] & 0xc0) >> 6)];
1251 *Destination++ = EncodingTable[(Source[2] & 0x3f)];
1271 *Destination++ = EncodingTable[(Source[0] & 0xfc) >> 2];
1272 *Destination++ = EncodingTable[((Source[0] & 0x03) << 4)];
1273 *Destination++ =
'=';
1274 *Destination++ =
'=';
1281 *Destination++ = EncodingTable[(Source[0] & 0xfc) >> 2];
1282 *Destination++ = EncodingTable[((Source[0] & 0x03) << 4) + ((Source[1] & 0xf0) >> 4)];
1283 *Destination++ = EncodingTable[((Source[1] & 0x0f) << 2)];
1284 *Destination++ =
'=';
1291 *Destination =
'\0';
1380 IN CONST CHAR8 *Source OPTIONAL,
1382 OUT UINT8 *Destination OPTIONAL,
1386 BOOLEAN PaddingMode;
1387 UINTN SixBitGroupsConsumed;
1389 UINTN OriginalDestinationSize;
1393 UINT8 DestinationOctet;
1395 if (DestinationSize ==
NULL) {
1402 if (Source ==
NULL) {
1403 if (SourceSize > 0) {
1419 if (Destination ==
NULL) {
1420 if (*DestinationSize > 0) {
1436 if ((Source !=
NULL) && (Destination !=
NULL)) {
1441 if ((
UINTN)Source + SourceSize <= (
UINTN)Destination) {
1445 }
else if ((
UINTN)Destination + *DestinationSize <= (
UINTN)Source) {
1460 PaddingMode =
FALSE;
1461 SixBitGroupsConsumed = 0;
1463 OriginalDestinationSize = *DestinationSize;
1464 *DestinationSize = 0;
1469 for (SourceIndex = 0; SourceIndex < SourceSize; SourceIndex++) {
1470 SourceChar = Source[SourceIndex];
1475 if ((SourceChar ==
'\t') || (SourceChar ==
'\n') || (SourceChar ==
'\v') ||
1476 (SourceChar ==
'\f') || (SourceChar ==
'\r') || (SourceChar ==
' '))
1491 if ((SourceChar ==
'=') && (SixBitGroupsConsumed == 3)) {
1492 SixBitGroupsConsumed = 0;
1503 if ((
'A' <= SourceChar) && (SourceChar <=
'Z')) {
1504 Base64Value = SourceChar -
'A';
1505 }
else if ((
'a' <= SourceChar) && (SourceChar <=
'z')) {
1506 Base64Value = 26 + (SourceChar -
'a');
1507 }
else if ((
'0' <= SourceChar) && (SourceChar <=
'9')) {
1508 Base64Value = 52 + (SourceChar -
'0');
1509 }
else if (SourceChar ==
'+') {
1511 }
else if (SourceChar ==
'/') {
1513 }
else if (SourceChar ==
'=') {
1519 if (SixBitGroupsConsumed == 2) {
1526 SixBitGroupsConsumed = 3;
1527 }
else if (SixBitGroupsConsumed == 3) {
1534 SixBitGroupsConsumed = 0;
1549 if (Accumulator != 0) {
1568 Accumulator = (Accumulator << 6) | Base64Value;
1569 SixBitGroupsConsumed++;
1570 switch (SixBitGroupsConsumed) {
1582 DestinationOctet = (UINT8)(Accumulator >> 4);
1590 DestinationOctet = (UINT8)(Accumulator >> 2);
1594 ASSERT (SixBitGroupsConsumed == 4);
1599 DestinationOctet = (UINT8)Accumulator;
1601 SixBitGroupsConsumed = 0;
1609 if (*DestinationSize < OriginalDestinationSize) {
1610 ASSERT (Destination !=
NULL);
1611 Destination[*DestinationSize] = DestinationOctet;
1614 (*DestinationSize)++;
1624 if (SixBitGroupsConsumed != 0) {
1631 if (*DestinationSize <= OriginalDestinationSize) {
1657 ASSERT (Value < 100);
1658 return (UINT8)(((Value / 10) << 4) | (Value % 10));
1681 ASSERT (Value < 0xa0);
1682 ASSERT ((Value & 0xf) < 0xa);
1683 return (UINT8)((Value >> 4) * 10 + (Value & 0xf));
UINTN EFIAPI StrSize(IN CONST CHAR16 *String)
RETURN_STATUS EFIAPI AsciiStrHexToUint64S(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINT64 *Data)
UINTN EFIAPI AsciiStrLen(IN CONST CHAR8 *String)
RETURN_STATUS EFIAPI StrDecimalToUint64S(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINT64 *Data)
RETURN_STATUS EFIAPI AsciiStrDecimalToUintnS(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINTN *Data)
RETURN_STATUS EFIAPI AsciiStrHexToUintnS(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINTN *Data)
RETURN_STATUS EFIAPI AsciiStrDecimalToUint64S(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINT64 *Data)
RETURN_STATUS EFIAPI StrHexToUintnS(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINTN *Data)
RETURN_STATUS EFIAPI StrDecimalToUintnS(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINTN *Data)
RETURN_STATUS EFIAPI StrHexToUint64S(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINT64 *Data)
UINTN EFIAPI AsciiStrSize(IN CONST CHAR8 *String)
UINTN EFIAPI StrLen(IN CONST CHAR16 *String)
CHAR8 *EFIAPI AsciiStrStr(IN CONST CHAR8 *String, IN CONST CHAR8 *SearchString)
#define RETURN_BUFFER_TOO_SMALL
#define RETURN_INVALID_PARAMETER
INTN EFIAPI AsciiStriCmp(IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString)
UINT64 EFIAPI StrHexToUint64(IN CONST CHAR16 *String)
UINT8 EFIAPI BcdToDecimal8(IN UINT8 Value)
BOOLEAN EFIAPI InternalAsciiIsDecimalDigitCharacter(IN CHAR8 Char)
CHAR16 EFIAPI CharToUpper(IN CHAR16 Char)
UINTN EFIAPI StrDecimalToUintn(IN CONST CHAR16 *String)
INTN EFIAPI StrCmp(IN CONST CHAR16 *FirstString, IN CONST CHAR16 *SecondString)
BOOLEAN EFIAPI InternalIsDecimalDigitCharacter(IN CHAR16 Char)
UINT64 EFIAPI AsciiStrDecimalToUint64(IN CONST CHAR8 *String)
BOOLEAN EFIAPI InternalAsciiIsHexaDecimalDigitCharacter(IN CHAR8 Char)
UINTN EFIAPI InternalAsciiHexCharToUintn(IN CHAR8 Char)
UINT64 EFIAPI StrDecimalToUint64(IN CONST CHAR16 *String)
INTN EFIAPI AsciiStrCmp(IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString)
INTN EFIAPI AsciiStrnCmp(IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString, IN UINTN Length)
RETURN_STATUS EFIAPI Base64Decode(IN CONST CHAR8 *Source OPTIONAL, IN UINTN SourceSize, OUT UINT8 *Destination OPTIONAL, IN OUT UINTN *DestinationSize)
UINTN EFIAPI AsciiStrDecimalToUintn(IN CONST CHAR8 *String)
UINTN EFIAPI StrHexToUintn(IN CONST CHAR16 *String)
UINTN EFIAPI InternalHexCharToUintn(IN CHAR16 Char)
INTN EFIAPI StrnCmp(IN CONST CHAR16 *FirstString, IN CONST CHAR16 *SecondString, IN UINTN Length)
UINTN EFIAPI AsciiStrHexToUintn(IN CONST CHAR8 *String)
UINT8 EFIAPI DecimalToBcd8(IN UINT8 Value)
CHAR8 EFIAPI AsciiCharToUpper(IN CHAR8 Chr)
UINT64 EFIAPI AsciiStrHexToUint64(IN CONST CHAR8 *String)
CHAR16 *EFIAPI StrStr(IN CONST CHAR16 *String, IN CONST CHAR16 *SearchString)
RETURN_STATUS EFIAPI Base64Encode(IN CONST UINT8 *Source, IN UINTN SourceLength, OUT CHAR8 *Destination OPTIONAL, IN OUT UINTN *DestinationSize)
BOOLEAN EFIAPI InternalIsHexaDecimalDigitCharacter(IN CHAR16 Char)
#define PcdGet32(TokenName)