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'));
586 return (BOOLEAN)(Char >=
'0' && Char <=
'9');
610 (Char >=
'A' && Char <=
'F') ||
611 (Char >=
'a' && Char <=
'f'));
639 ASSERT (String !=
NULL);
641 for (Length = 0; *String !=
'\0'; String++, Length++) {
646 if (
PcdGet32 (PcdMaximumAsciiStringLength) != 0) {
647 ASSERT (Length <
PcdGet32 (PcdMaximumAsciiStringLength));
677 return (
AsciiStrLen (String) + 1) *
sizeof (*String);
719 while ((*FirstString !=
'\0') && (*FirstString == *SecondString)) {
724 return *FirstString - *SecondString;
746 return (UINT8)((Chr >=
'a' && Chr <=
'z') ? Chr - (
'a' -
'A') : Chr);
811 CHAR8 UpperFirstString;
812 CHAR8 UpperSecondString;
822 while ((*FirstString !=
'\0') && (*SecondString !=
'\0') && (UpperFirstString == UpperSecondString)) {
829 return UpperFirstString - UpperSecondString;
880 if (
PcdGet32 (PcdMaximumAsciiStringLength) != 0) {
881 ASSERT (Length <=
PcdGet32 (PcdMaximumAsciiStringLength));
884 while ((*FirstString !=
'\0') &&
885 (*SecondString !=
'\0') &&
886 (*FirstString == *SecondString) &&
894 return *FirstString - *SecondString;
928 CONST CHAR8 *FirstMatch;
929 CONST CHAR8 *SearchStringTmp;
937 if (*SearchString ==
'\0') {
938 return (CHAR8 *)String;
941 while (*String !=
'\0') {
942 SearchStringTmp = SearchString;
945 while ( (*String == *SearchStringTmp)
946 && (*String !=
'\0'))
952 if (*SearchStringTmp ==
'\0') {
953 return (CHAR8 *)FirstMatch;
956 if (*String ==
'\0') {
960 String = FirstMatch + 1;
1154STATIC CHAR8 EncodingTable[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1155 "abcdefghijklmnopqrstuvwxyz"
1182 OUT CHAR8 *Destination OPTIONAL,
1192 if ((Source ==
NULL) || (DestinationSize ==
NULL)) {
1199 if (SourceLength == 0) {
1200 if (*DestinationSize < 1) {
1201 *DestinationSize = 1;
1205 *DestinationSize = 1;
1206 *Destination =
'\0';
1220 RequiredSize = ((SourceLength + 2) / 3) * 4 + 1;
1221 if ((Destination ==
NULL) || (*DestinationSize < RequiredSize)) {
1222 *DestinationSize = RequiredSize;
1226 Left = SourceLength;
1232 *Destination++ = EncodingTable[(Source[0] & 0xfc) >> 2];
1233 *Destination++ = EncodingTable[((Source[0] & 0x03) << 4) + ((Source[1] & 0xf0) >> 4)];
1234 *Destination++ = EncodingTable[((Source[1] & 0x0f) << 2) + ((Source[2] & 0xc0) >> 6)];
1235 *Destination++ = EncodingTable[(Source[2] & 0x3f)];
1255 *Destination++ = EncodingTable[(Source[0] & 0xfc) >> 2];
1256 *Destination++ = EncodingTable[((Source[0] & 0x03) << 4)];
1257 *Destination++ =
'=';
1258 *Destination++ =
'=';
1265 *Destination++ = EncodingTable[(Source[0] & 0xfc) >> 2];
1266 *Destination++ = EncodingTable[((Source[0] & 0x03) << 4) + ((Source[1] & 0xf0) >> 4)];
1267 *Destination++ = EncodingTable[((Source[1] & 0x0f) << 2)];
1268 *Destination++ =
'=';
1275 *Destination =
'\0';
1364 IN CONST CHAR8 *Source OPTIONAL,
1366 OUT UINT8 *Destination OPTIONAL,
1370 BOOLEAN PaddingMode;
1371 UINTN SixBitGroupsConsumed;
1373 UINTN OriginalDestinationSize;
1377 UINT8 DestinationOctet;
1379 if (DestinationSize ==
NULL) {
1386 if (Source ==
NULL) {
1387 if (SourceSize > 0) {
1403 if (Destination ==
NULL) {
1404 if (*DestinationSize > 0) {
1420 if ((Source !=
NULL) && (Destination !=
NULL)) {
1425 if ((
UINTN)Source + SourceSize <= (
UINTN)Destination) {
1429 }
else if ((
UINTN)Destination + *DestinationSize <= (
UINTN)Source) {
1444 PaddingMode =
FALSE;
1445 SixBitGroupsConsumed = 0;
1447 OriginalDestinationSize = *DestinationSize;
1448 *DestinationSize = 0;
1453 for (SourceIndex = 0; SourceIndex < SourceSize; SourceIndex++) {
1454 SourceChar = Source[SourceIndex];
1459 if ((SourceChar ==
'\t') || (SourceChar ==
'\n') || (SourceChar ==
'\v') ||
1460 (SourceChar ==
'\f') || (SourceChar ==
'\r') || (SourceChar ==
' '))
1475 if ((SourceChar ==
'=') && (SixBitGroupsConsumed == 3)) {
1476 SixBitGroupsConsumed = 0;
1487 if ((
'A' <= SourceChar) && (SourceChar <=
'Z')) {
1488 Base64Value = SourceChar -
'A';
1489 }
else if ((
'a' <= SourceChar) && (SourceChar <=
'z')) {
1490 Base64Value = 26 + (SourceChar -
'a');
1491 }
else if ((
'0' <= SourceChar) && (SourceChar <=
'9')) {
1492 Base64Value = 52 + (SourceChar -
'0');
1493 }
else if (SourceChar ==
'+') {
1495 }
else if (SourceChar ==
'/') {
1497 }
else if (SourceChar ==
'=') {
1503 if (SixBitGroupsConsumed == 2) {
1510 SixBitGroupsConsumed = 3;
1511 }
else if (SixBitGroupsConsumed == 3) {
1518 SixBitGroupsConsumed = 0;
1533 if (Accumulator != 0) {
1552 Accumulator = (Accumulator << 6) | Base64Value;
1553 SixBitGroupsConsumed++;
1554 switch (SixBitGroupsConsumed) {
1566 DestinationOctet = (UINT8)(Accumulator >> 4);
1574 DestinationOctet = (UINT8)(Accumulator >> 2);
1578 ASSERT (SixBitGroupsConsumed == 4);
1583 DestinationOctet = (UINT8)Accumulator;
1585 SixBitGroupsConsumed = 0;
1593 if (*DestinationSize < OriginalDestinationSize) {
1594 ASSERT (Destination !=
NULL);
1595 Destination[*DestinationSize] = DestinationOctet;
1598 (*DestinationSize)++;
1608 if (SixBitGroupsConsumed != 0) {
1615 if (*DestinationSize <= OriginalDestinationSize) {
1641 ASSERT (Value < 100);
1642 return (UINT8)(((Value / 10) << 4) | (Value % 10));
1665 ASSERT (Value < 0xa0);
1666 ASSERT ((Value & 0xf) < 0xa);
1667 return (UINT8)((Value >> 4) * 10 + (Value & 0xf));
#define RETURN_BUFFER_TOO_SMALL
#define RETURN_ERROR(StatusCode)
#define RETURN_INVALID_PARAMETER
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)
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)