232 lines
3.4 KiB
C
232 lines
3.4 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998 Intel Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
str.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
String runtime functions
|
||
|
|
||
|
|
||
|
Revision History
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "lib.h"
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtAcquireLock)
|
||
|
#endif
|
||
|
INTN
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrCmp (
|
||
|
IN CONST CHAR16 *s1,
|
||
|
IN CONST CHAR16 *s2
|
||
|
)
|
||
|
// compare strings
|
||
|
{
|
||
|
while (*s1) {
|
||
|
if (*s1 != *s2) {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
s1 += 1;
|
||
|
s2 += 1;
|
||
|
}
|
||
|
|
||
|
return *s1 - *s2;
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrCpy)
|
||
|
#endif
|
||
|
VOID
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrCpy (
|
||
|
IN CHAR16 *Dest,
|
||
|
IN CONST CHAR16 *Src
|
||
|
)
|
||
|
// copy strings
|
||
|
{
|
||
|
while (*Src) {
|
||
|
*(Dest++) = *(Src++);
|
||
|
}
|
||
|
*Dest = 0;
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrnCpy)
|
||
|
#endif
|
||
|
VOID
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrnCpy (
|
||
|
IN CHAR16 *Dest,
|
||
|
IN CONST CHAR16 *Src,
|
||
|
IN UINTN Len
|
||
|
)
|
||
|
// copy strings
|
||
|
{
|
||
|
UINTN Size = RtStrnLen(Src, Len);
|
||
|
if (Size != Len)
|
||
|
RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0');
|
||
|
RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrCpy)
|
||
|
#endif
|
||
|
CHAR16 *
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStpCpy (
|
||
|
IN CHAR16 *Dest,
|
||
|
IN CONST CHAR16 *Src
|
||
|
)
|
||
|
// copy strings
|
||
|
{
|
||
|
while (*Src) {
|
||
|
*(Dest++) = *(Src++);
|
||
|
}
|
||
|
*Dest = 0;
|
||
|
return Dest;
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStpnCpy)
|
||
|
#endif
|
||
|
CHAR16 *
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStpnCpy (
|
||
|
IN CHAR16 *Dest,
|
||
|
IN CONST CHAR16 *Src,
|
||
|
IN UINTN Len
|
||
|
)
|
||
|
// copy strings
|
||
|
{
|
||
|
UINTN Size = RtStrnLen(Src, Len);
|
||
|
if (Size != Len)
|
||
|
RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0');
|
||
|
RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
|
||
|
return Dest + Size;
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrCat)
|
||
|
#endif
|
||
|
VOID
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrCat (
|
||
|
IN CHAR16 *Dest,
|
||
|
IN CONST CHAR16 *Src
|
||
|
)
|
||
|
{
|
||
|
RtStrCpy(Dest+StrLen(Dest), Src);
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrnCat)
|
||
|
#endif
|
||
|
VOID
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrnCat (
|
||
|
IN CHAR16 *Dest,
|
||
|
IN CONST CHAR16 *Src,
|
||
|
IN UINTN Len
|
||
|
)
|
||
|
{
|
||
|
UINTN DestSize, Size;
|
||
|
|
||
|
DestSize = StrLen(Dest);
|
||
|
Size = RtStrnLen(Src, Len);
|
||
|
RtCopyMem(Dest + DestSize, Src, Size * sizeof(CHAR16));
|
||
|
Dest[DestSize + Size] = '\0';
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrLen)
|
||
|
#endif
|
||
|
UINTN
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrLen (
|
||
|
IN CONST CHAR16 *s1
|
||
|
)
|
||
|
// string length
|
||
|
{
|
||
|
UINTN len;
|
||
|
|
||
|
for (len=0; *s1; s1+=1, len+=1) ;
|
||
|
return len;
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrnLen)
|
||
|
#endif
|
||
|
UINTN
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrnLen (
|
||
|
IN CONST CHAR16 *s1,
|
||
|
IN UINTN Len
|
||
|
)
|
||
|
// copy strings
|
||
|
{
|
||
|
UINTN i;
|
||
|
for (i = 0; *s1 && i < Len; i++)
|
||
|
s1++;
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtStrSize)
|
||
|
#endif
|
||
|
UINTN
|
||
|
RUNTIMEFUNCTION
|
||
|
RtStrSize (
|
||
|
IN CONST CHAR16 *s1
|
||
|
)
|
||
|
// string size
|
||
|
{
|
||
|
UINTN len;
|
||
|
|
||
|
for (len=0; *s1; s1+=1, len+=1) ;
|
||
|
return (len + 1) * sizeof(CHAR16);
|
||
|
}
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtBCDtoDecimal)
|
||
|
#endif
|
||
|
UINT8
|
||
|
RUNTIMEFUNCTION
|
||
|
RtBCDtoDecimal(
|
||
|
IN UINT8 BcdValue
|
||
|
)
|
||
|
{
|
||
|
UINTN High, Low;
|
||
|
|
||
|
High = BcdValue >> 4;
|
||
|
Low = BcdValue - (High << 4);
|
||
|
|
||
|
return ((UINT8)(Low + (High * 10)));
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifndef __GNUC__
|
||
|
#pragma RUNTIME_CODE(RtDecimaltoBCD)
|
||
|
#endif
|
||
|
UINT8
|
||
|
RUNTIMEFUNCTION
|
||
|
RtDecimaltoBCD (
|
||
|
IN UINT8 DecValue
|
||
|
)
|
||
|
{
|
||
|
UINTN High, Low;
|
||
|
|
||
|
High = DecValue / 10;
|
||
|
Low = DecValue - (High * 10);
|
||
|
|
||
|
return ((UINT8)(Low + (High << 4)));
|
||
|
}
|
||
|
|
||
|
|