moved everything to chookspace
This commit is contained in:
432
gnu-efi/lib/str.c
Normal file
432
gnu-efi/lib/str.c
Normal file
@@ -0,0 +1,432 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1998 Intel Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
str.c
|
||||
|
||||
Abstract:
|
||||
|
||||
|
||||
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "lib.h"
|
||||
|
||||
|
||||
INTN
|
||||
StrCmp (
|
||||
IN CONST CHAR16 *s1,
|
||||
IN CONST CHAR16 *s2
|
||||
)
|
||||
// compare strings
|
||||
{
|
||||
return RtStrCmp(s1, s2);
|
||||
}
|
||||
|
||||
INTN
|
||||
StrnCmp (
|
||||
IN CONST CHAR16 *s1,
|
||||
IN CONST CHAR16 *s2,
|
||||
IN UINTN len
|
||||
)
|
||||
// compare strings
|
||||
{
|
||||
while (*s1 && len) {
|
||||
if (*s1 != *s2) {
|
||||
break;
|
||||
}
|
||||
|
||||
s1 += 1;
|
||||
s2 += 1;
|
||||
len -= 1;
|
||||
}
|
||||
|
||||
return len ? *s1 - *s2 : 0;
|
||||
}
|
||||
|
||||
|
||||
INTN EFIAPI
|
||||
LibStubStriCmp (
|
||||
IN EFI_UNICODE_COLLATION_INTERFACE *This EFI_UNUSED,
|
||||
IN CHAR16 *s1,
|
||||
IN CHAR16 *s2
|
||||
)
|
||||
{
|
||||
return StrCmp (s1, s2);
|
||||
}
|
||||
|
||||
VOID EFIAPI
|
||||
LibStubStrLwrUpr (
|
||||
IN EFI_UNICODE_COLLATION_INTERFACE *This EFI_UNUSED,
|
||||
IN CHAR16 *Str EFI_UNUSED
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
INTN
|
||||
StriCmp (
|
||||
IN CONST CHAR16 *s1,
|
||||
IN CONST CHAR16 *s2
|
||||
)
|
||||
// compare strings
|
||||
{
|
||||
if (UnicodeInterface == &LibStubUnicodeInterface)
|
||||
return UnicodeInterface->StriColl(UnicodeInterface, (CHAR16 *)s1, (CHAR16 *)s2);
|
||||
else
|
||||
return uefi_call_wrapper(UnicodeInterface->StriColl, 3, UnicodeInterface, (CHAR16 *)s1, (CHAR16 *)s2);
|
||||
}
|
||||
|
||||
VOID
|
||||
StrLwr (
|
||||
IN CHAR16 *Str
|
||||
)
|
||||
// lwoer case string
|
||||
{
|
||||
if (UnicodeInterface == &LibStubUnicodeInterface)
|
||||
UnicodeInterface->StrLwr(UnicodeInterface, Str);
|
||||
else uefi_call_wrapper(UnicodeInterface->StrLwr, 2, UnicodeInterface, Str);
|
||||
}
|
||||
|
||||
VOID
|
||||
StrUpr (
|
||||
IN CHAR16 *Str
|
||||
)
|
||||
// upper case string
|
||||
{
|
||||
if (UnicodeInterface == &LibStubUnicodeInterface)
|
||||
UnicodeInterface->StrUpr(UnicodeInterface, Str);
|
||||
else uefi_call_wrapper(UnicodeInterface->StrUpr, 2, UnicodeInterface, Str);
|
||||
}
|
||||
|
||||
VOID
|
||||
StrCpy (
|
||||
IN CHAR16 *Dest,
|
||||
IN CONST CHAR16 *Src
|
||||
)
|
||||
// copy strings
|
||||
{
|
||||
RtStrCpy (Dest, Src);
|
||||
}
|
||||
|
||||
VOID
|
||||
StrnCpy (
|
||||
IN CHAR16 *Dest,
|
||||
IN CONST CHAR16 *Src,
|
||||
IN UINTN Len
|
||||
)
|
||||
// copy strings
|
||||
{
|
||||
RtStrnCpy (Dest, Src, Len);
|
||||
}
|
||||
|
||||
CHAR16 *
|
||||
StpCpy (
|
||||
IN CHAR16 *Dest,
|
||||
IN CONST CHAR16 *Src
|
||||
)
|
||||
// copy strings
|
||||
{
|
||||
return RtStpCpy (Dest, Src);
|
||||
}
|
||||
|
||||
CHAR16 *
|
||||
StpnCpy (
|
||||
IN CHAR16 *Dest,
|
||||
IN CONST CHAR16 *Src,
|
||||
IN UINTN Len
|
||||
)
|
||||
// copy strings
|
||||
{
|
||||
return RtStpnCpy (Dest, Src, Len);
|
||||
}
|
||||
|
||||
VOID
|
||||
StrCat (
|
||||
IN CHAR16 *Dest,
|
||||
IN CONST CHAR16 *Src
|
||||
)
|
||||
{
|
||||
RtStrCat(Dest, Src);
|
||||
}
|
||||
|
||||
VOID
|
||||
StrnCat (
|
||||
IN CHAR16 *Dest,
|
||||
IN CONST CHAR16 *Src,
|
||||
IN UINTN Len
|
||||
)
|
||||
{
|
||||
RtStrnCat(Dest, Src, Len);
|
||||
}
|
||||
|
||||
|
||||
UINTN
|
||||
StrnLen (
|
||||
IN CONST CHAR16 *s1,
|
||||
IN UINTN Len
|
||||
)
|
||||
// string length
|
||||
{
|
||||
return RtStrnLen(s1, Len);
|
||||
}
|
||||
|
||||
UINTN
|
||||
StrLen (
|
||||
IN CONST CHAR16 *s1
|
||||
)
|
||||
// string length
|
||||
{
|
||||
return RtStrLen(s1);
|
||||
}
|
||||
|
||||
UINTN
|
||||
StrSize (
|
||||
IN CONST CHAR16 *s1
|
||||
)
|
||||
// string size
|
||||
{
|
||||
return RtStrSize(s1);
|
||||
}
|
||||
|
||||
CHAR16 *
|
||||
StrDuplicate (
|
||||
IN CONST CHAR16 *Src
|
||||
)
|
||||
// duplicate a string
|
||||
{
|
||||
CHAR16 *Dest;
|
||||
UINTN Size;
|
||||
|
||||
Size = StrSize(Src);
|
||||
Dest = AllocatePool (Size);
|
||||
if (Dest) {
|
||||
CopyMem (Dest, Src, Size);
|
||||
}
|
||||
return Dest;
|
||||
}
|
||||
|
||||
UINTN
|
||||
strlena (
|
||||
IN CONST CHAR8 *s1
|
||||
)
|
||||
// string length
|
||||
{
|
||||
UINTN len;
|
||||
|
||||
for (len=0; *s1; s1+=1, len+=1) ;
|
||||
return len;
|
||||
}
|
||||
|
||||
UINTN
|
||||
strcmpa (
|
||||
IN CONST CHAR8 *s1,
|
||||
IN CONST CHAR8 *s2
|
||||
)
|
||||
// compare strings
|
||||
{
|
||||
while (*s1) {
|
||||
if (*s1 != *s2) {
|
||||
break;
|
||||
}
|
||||
|
||||
s1 += 1;
|
||||
s2 += 1;
|
||||
}
|
||||
|
||||
return *s1 - *s2;
|
||||
}
|
||||
|
||||
UINTN
|
||||
strncmpa (
|
||||
IN CONST CHAR8 *s1,
|
||||
IN CONST CHAR8 *s2,
|
||||
IN UINTN len
|
||||
)
|
||||
// compare strings
|
||||
{
|
||||
while (*s1 && len) {
|
||||
if (*s1 != *s2) {
|
||||
break;
|
||||
}
|
||||
|
||||
s1 += 1;
|
||||
s2 += 1;
|
||||
len -= 1;
|
||||
}
|
||||
|
||||
return len ? *s1 - *s2 : 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINTN
|
||||
xtoi (
|
||||
CONST CHAR16 *str
|
||||
)
|
||||
// convert hex string to uint
|
||||
{
|
||||
UINTN u;
|
||||
CHAR16 c;
|
||||
|
||||
// skip preceeding white space
|
||||
while (*str && *str == ' ') {
|
||||
str += 1;
|
||||
}
|
||||
|
||||
// convert hex digits
|
||||
u = 0;
|
||||
while ((c = *(str++))) {
|
||||
if (c >= 'a' && c <= 'f') {
|
||||
c -= 'a' - 'A';
|
||||
}
|
||||
|
||||
if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) {
|
||||
u = (u << 4) | (c - (c >= 'A' ? 'A'-10 : '0'));
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return u;
|
||||
}
|
||||
|
||||
UINTN
|
||||
Atoi (
|
||||
CONST CHAR16 *str
|
||||
)
|
||||
// convert hex string to uint
|
||||
{
|
||||
UINTN u;
|
||||
CHAR16 c;
|
||||
|
||||
// skip preceeding white space
|
||||
while (*str && *str == ' ') {
|
||||
str += 1;
|
||||
}
|
||||
|
||||
// convert digits
|
||||
u = 0;
|
||||
while ((c = *(str++))) {
|
||||
if (c >= '0' && c <= '9') {
|
||||
u = (u * 10) + c - '0';
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return u;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
MetaMatch (
|
||||
IN CHAR16 *String,
|
||||
IN CHAR16 *Pattern
|
||||
)
|
||||
{
|
||||
CHAR16 c, p, l;
|
||||
|
||||
for (; ;) {
|
||||
p = *Pattern;
|
||||
Pattern += 1;
|
||||
|
||||
switch (p) {
|
||||
case 0:
|
||||
// End of pattern. If end of string, TRUE match
|
||||
return *String ? FALSE : TRUE;
|
||||
|
||||
case '*':
|
||||
// Match zero or more chars
|
||||
while (*String) {
|
||||
if (MetaMatch (String, Pattern)) {
|
||||
return TRUE;
|
||||
}
|
||||
String += 1;
|
||||
}
|
||||
return MetaMatch (String, Pattern);
|
||||
|
||||
case '?':
|
||||
// Match any one char
|
||||
if (!*String) {
|
||||
return FALSE;
|
||||
}
|
||||
String += 1;
|
||||
break;
|
||||
|
||||
case '[':
|
||||
// Match char set
|
||||
c = *String;
|
||||
if (!c) {
|
||||
return FALSE; // syntax problem
|
||||
}
|
||||
|
||||
l = 0;
|
||||
while ((p = *Pattern++)) {
|
||||
if (p == ']') {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (p == '-') { // if range of chars,
|
||||
p = *Pattern; // get high range
|
||||
if (p == 0 || p == ']') {
|
||||
return FALSE; // syntax problem
|
||||
}
|
||||
|
||||
if (c >= l && c <= p) { // if in range,
|
||||
break; // it's a match
|
||||
}
|
||||
}
|
||||
|
||||
l = p;
|
||||
if (c == p) { // if char matches
|
||||
break; // move on
|
||||
}
|
||||
}
|
||||
|
||||
// skip to end of match char set
|
||||
while (p && p != ']') {
|
||||
p = *Pattern;
|
||||
Pattern += 1;
|
||||
}
|
||||
|
||||
String += 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
c = *String;
|
||||
if (c != p) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
String += 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN EFIAPI
|
||||
LibStubMetaiMatch (
|
||||
IN EFI_UNICODE_COLLATION_INTERFACE *This EFI_UNUSED,
|
||||
IN CHAR16 *String,
|
||||
IN CHAR16 *Pattern
|
||||
)
|
||||
{
|
||||
return MetaMatch (String, Pattern);
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN
|
||||
MetaiMatch (
|
||||
IN CHAR16 *String,
|
||||
IN CHAR16 *Pattern
|
||||
)
|
||||
{
|
||||
if (UnicodeInterface == &LibStubUnicodeInterface)
|
||||
return UnicodeInterface->MetaiMatch(UnicodeInterface, String, Pattern);
|
||||
else return uefi_call_wrapper(UnicodeInterface->MetaiMatch, 3, UnicodeInterface, String, Pattern);
|
||||
}
|
||||
Reference in New Issue
Block a user