17#include <Library/BaseLib.h>
18#include <Library/BaseOverflowLib.h>
19#include <Library/DebugLib.h>
20#include <Library/MemoryAllocationLib.h>
21#include <Library/PrintLib.h>
37 return ((Char >=
' ') && (Char <
'~'));
53 return ((Char >=
'A' && Char <=
'Z') || (Char >=
'a' && Char <=
'z'));
69 return ( (Char ==
' ')
82 return Char >= L
'0' && Char <= L
'9';
93 while ((Needle = AsciiStrStr (Needle,
"/")) != NULL) {
106 while ((Needle = AsciiStrStr (Needle,
"\\")) != NULL) {
120 IN CONST CHAR8 *AsciiString,
124 CHAR16 *UnicodeString;
125 CHAR16 *UnicodeStringWalker;
126 UINTN UnicodeStringSize;
128 ASSERT (AsciiString != NULL);
131 Length = AsciiStrLen (AsciiString);
134 UnicodeStringSize = (
Length + 1) *
sizeof (CHAR16);
135 UnicodeString = AllocatePool (UnicodeStringSize);
137 if (UnicodeString != NULL) {
138 UnicodeStringWalker = UnicodeString;
139 while (*AsciiString !=
'\0' &&
Length--) {
140 *(UnicodeStringWalker++) = *(AsciiString++);
143 *UnicodeStringWalker = L
'\0';
146 return UnicodeString;
152 IN UINT32 BufferSize,
156 CONST UINT32 MaxShifts = (
sizeof (UINT64) * 8) - 4;
161 if (BufferSize < 4) {
170 for (Printed = FALSE, Index = MaxShifts; Index <= MaxShifts; Index -= 4) {
171 Curr = (UINT8)(
RShiftU64 (Value, Index) & 0xFU);
174 *
Buffer++ =
"0123456789abcdef"[Curr];
175 if (--BufferSize == 0) {
191 OUT CHAR8 *StartOfBuffer,
193 IN CONST CHAR8 *FormatString,
200 UINTN NumberOfPrinted;
202 ASSERT (StartOfBuffer != NULL);
204 ASSERT (FormatString != NULL);
206 VA_START (Marker, FormatString);
208 VA_COPY (Marker2, Marker);
209 NumberOfPrinted = SPrintLengthAsciiFormat (FormatString, Marker2);
212 if (BufferSize - 1 >= NumberOfPrinted) {
213 AsciiVSPrint (StartOfBuffer, BufferSize, FormatString, Marker);
214 Status = EFI_SUCCESS;
216 Status = EFI_OUT_OF_RESOURCES;
227 IN CONST CHAR8 *FirstString,
228 IN CONST CHAR8 *SecondString,
232 CHAR8 UpperFirstString;
233 CHAR8 UpperSecondString;
243 ASSERT (AsciiStrSize (FirstString) != 0);
244 ASSERT (AsciiStrSize (SecondString) != 0);
246 UpperFirstString = AsciiCharToUpper (*FirstString);
247 UpperSecondString = AsciiCharToUpper (*SecondString);
248 while ((*FirstString !=
'\0') &&
249 (*SecondString !=
'\0') &&
250 (UpperFirstString == UpperSecondString) &&
255 UpperFirstString = AsciiCharToUpper (*FirstString);
256 UpperSecondString = AsciiCharToUpper (*SecondString);
260 return UpperFirstString - UpperSecondString;
266 IN CONST CHAR8 *String,
267 IN CONST CHAR8 *SearchString,
268 IN BOOLEAN CaseInsensitiveMatch
272 UINTN SearchStringLength;
275 ASSERT (SearchString != NULL);
277 StringLength = AsciiStrLen (String);
278 SearchStringLength = AsciiStrLen (SearchString);
280 if (CaseInsensitiveMatch) {
281 return StringLength >= SearchStringLength
282 &&
OcAsciiStrniCmp (&String[StringLength - SearchStringLength], SearchString, SearchStringLength) == 0;
285 return StringLength >= SearchStringLength
286 && AsciiStrnCmp (&String[StringLength - SearchStringLength], SearchString, SearchStringLength) == 0;
292 IN CONST CHAR8 *String,
293 IN CONST CHAR8 *SearchString,
294 IN BOOLEAN CaseInsensitiveMatch
301 ASSERT (SearchString != NULL);
305 Second = *SearchString++;
306 if (Second ==
'\0') {
314 if (CaseInsensitiveMatch) {
315 First = AsciiCharToUpper (First);
316 Second = AsciiCharToUpper (Second);
319 if (First != Second) {
328 IN CONST CHAR8 *String,
329 IN CONST CHAR8 *SearchString
332 CONST CHAR8 *FirstMatch;
333 CONST CHAR8 *SearchStringTmp;
335 ASSERT (AsciiStrSize (String) != 0);
336 ASSERT (AsciiStrSize (SearchString) != 0);
338 if (*SearchString ==
'\0') {
339 return (CHAR8 *)String;
342 while (*String !=
'\0') {
343 SearchStringTmp = SearchString;
346 while ( (AsciiCharToUpper (*String) == AsciiCharToUpper (*SearchStringTmp))
347 && (*String !=
'\0'))
353 if (*SearchStringTmp ==
'\0') {
354 return (CHAR8 *)FirstMatch;
357 if (*String ==
'\0') {
361 String = FirstMatch + 1;
370 IN CONST CHAR8 *String,
374 ASSERT (AsciiStrSize (String) != 0);
376 while (*String !=
'\0') {
380 if (*String == Char) {
381 return (CHAR8 *)String;
393 IN CONST CHAR8 *String,
399 ASSERT (AsciiStrSize (String) != 0);
403 while (*String !=
'\0') {
407 if (*String == Char) {
408 Save = (CHAR8 *)String;
419 IN CONST CHAR8 *String,
425 for (Index = 0; Index < Number; ++Index) {
439 if (Index == Number) {
446 if (Index == Number - 1) {
447 return String[Index] ==
'\0';
459 IN CONST CHAR8 *String,
465 Status = AsciiStrToGuid (String, Guid);
466 if (EFI_ERROR (Status)) {
473 Guid->Data1 = SwapBytes32 (Guid->Data1);
474 Guid->Data2 = SwapBytes16 (Guid->Data2);
475 Guid->Data3 = SwapBytes16 (Guid->Data3);
481 IN OUT CHAR8 *String,
482 IN BOOLEAN SingleLine
485 while (*String != L
'\0') {
486 if ((*String & 0x7F) != *String) {
491 }
else if (SingleLine && ((*String ==
'\r') || (*String ==
'\n'))) {
497 }
else if ((*String < 0x20) || (*String == 0x7F)) {
511 IN OUT CHAR8 **AsciiBuffer,
512 IN OUT UINTN *AsciiBufferSize,
513 IN CONST CHAR8 *FormatString,
523 if (*AsciiBuffer == NULL) {
527 VA_START (Marker, FormatString);
528 AsciiVSPrint (Tmp,
sizeof (Tmp), FormatString, Marker);
531 Status = AsciiStrCatS (*AsciiBuffer, *AsciiBufferSize, Tmp);
532 if (Status == EFI_BUFFER_TOO_SMALL) {
533 if (BaseOverflowMulUN (*AsciiBufferSize, 2, &NewBufferSize)) {
537 NewBuffer = ReallocatePool (*AsciiBufferSize, NewBufferSize, *AsciiBuffer);
538 if (NewBuffer == NULL) {
539 FreePool (*AsciiBuffer);
542 *AsciiBufferSize = 0;
547 *AsciiBuffer = NewBuffer;
548 *AsciiBufferSize = NewBufferSize;
550 AsciiStrCatS (*AsciiBuffer, *AsciiBufferSize, Tmp);
563 for (Index = 0; Str[Index] !=
'\0'; ++Index) {
564 if ((Str[Index] >=
'A') && (Str[Index] <=
'Z')) {
565 Str[Index] -= (
'A' -
'a');
BOOLEAN OcAsciiStringNPrintable(IN CONST CHAR8 *String, IN UINTN Number)
VOID AsciiFilterString(IN OUT CHAR8 *String, IN BOOLEAN SingleLine)
INTN IsAsciiAlpha(IN CHAR8 Char)
CHAR16 * AsciiStrCopyToUnicode(IN CONST CHAR8 *AsciiString, IN UINTN Length)
VOID EFIAPI OcAsciiPrintBuffer(IN OUT CHAR8 **AsciiBuffer, IN OUT UINTN *AsciiBufferSize, IN CONST CHAR8 *FormatString,...)
CHAR8 * OcAsciiToLower(CHAR8 *Str)
VOID AsciiUefiSlashes(IN OUT CHAR8 *String)
VOID AsciiUnixSlashes(IN OUT CHAR8 *String)
CHAR8 *EFIAPI OcAsciiStrrChr(IN CONST CHAR8 *String, IN CHAR8 Char)
BOOLEAN IsAsciiNumber(IN CHAR8 Char)
EFI_STATUS EFIAPI OcAsciiStrToRawGuid(IN CONST CHAR8 *String, OUT GUID *Guid)
BOOLEAN IsAsciiPrint(IN CHAR8 Char)
CHAR8 *EFIAPI OcAsciiStrChr(IN CONST CHAR8 *String, IN CHAR8 Char)
BOOLEAN EFIAPI OcAsciiEndsWith(IN CONST CHAR8 *String, IN CONST CHAR8 *SearchString, IN BOOLEAN CaseInsensitiveMatch)
EFI_STATUS EFIAPI OcAsciiSafeSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString,...)
INTN IsAsciiSpace(IN CHAR8 Char)
CHAR8 *EFIAPI OcAsciiStriStr(IN CONST CHAR8 *String, IN CONST CHAR8 *SearchString)
INTN EFIAPI OcAsciiStrniCmp(IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString, IN UINTN Length)
BOOLEAN AsciiUint64ToLowerHex(OUT CHAR8 *Buffer, IN UINT32 BufferSize, IN UINT64 Value)
BOOLEAN EFIAPI OcAsciiStartsWith(IN CONST CHAR8 *String, IN CONST CHAR8 *SearchString, IN BOOLEAN CaseInsensitiveMatch)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
UINT64 EFIAPI RShiftU64(IN UINT64 Operand, IN UINTN Count)