Home | History | Annotate | Line # | Download | only in runtime
rtstr.c revision 1.1.1.2
      1 /*	$NetBSD: rtstr.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $	*/
      2 
      3 /*++
      4 
      5 Copyright (c) 1998  Intel Corporation
      6 
      7 Module Name:
      8 
      9     str.c
     10 
     11 Abstract:
     12 
     13     String runtime functions
     14 
     15 
     16 Revision History
     17 
     18 --*/
     19 
     20 #include "lib.h"
     21 
     22 #ifndef __GNUC__
     23 #pragma RUNTIME_CODE(RtAcquireLock)
     24 #endif
     25 INTN
     26 RUNTIMEFUNCTION
     27 RtStrCmp (
     28     IN CONST CHAR16   *s1,
     29     IN CONST CHAR16   *s2
     30     )
     31 // compare strings
     32 {
     33     while (*s1) {
     34         if (*s1 != *s2) {
     35             break;
     36         }
     37 
     38         s1 += 1;
     39         s2 += 1;
     40     }
     41 
     42     return *s1 - *s2;
     43 }
     44 
     45 #ifndef __GNUC__
     46 #pragma RUNTIME_CODE(RtStrCpy)
     47 #endif
     48 VOID
     49 RUNTIMEFUNCTION
     50 RtStrCpy (
     51     IN CHAR16   *Dest,
     52     IN CONST CHAR16   *Src
     53     )
     54 // copy strings
     55 {
     56     while (*Src) {
     57         *(Dest++) = *(Src++);
     58     }
     59     *Dest = 0;
     60 }
     61 
     62 #ifndef __GNUC__
     63 #pragma RUNTIME_CODE(RtStrnCpy)
     64 #endif
     65 VOID
     66 RUNTIMEFUNCTION
     67 RtStrnCpy (
     68     IN CHAR16   *Dest,
     69     IN CONST CHAR16   *Src,
     70     IN UINTN     Len
     71     )
     72 // copy strings
     73 {
     74     UINTN Size = RtStrnLen(Src, Len);
     75     if (Size != Len)
     76 	RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
     77     RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
     78 }
     79 
     80 #ifndef __GNUC__
     81 #pragma RUNTIME_CODE(RtStrCpy)
     82 #endif
     83 CHAR16 *
     84 RUNTIMEFUNCTION
     85 RtStpCpy (
     86     IN CHAR16   *Dest,
     87     IN CONST CHAR16   *Src
     88     )
     89 // copy strings
     90 {
     91     while (*Src) {
     92         *(Dest++) = *(Src++);
     93     }
     94     *Dest = 0;
     95     return Dest;
     96 }
     97 
     98 #ifndef __GNUC__
     99 #pragma RUNTIME_CODE(RtStrnCpy)
    100 #endif
    101 CHAR16 *
    102 RUNTIMEFUNCTION
    103 RtStpnCpy (
    104     IN CHAR16   *Dest,
    105     IN CONST CHAR16   *Src,
    106     IN UINTN     Len
    107     )
    108 // copy strings
    109 {
    110     UINTN Size = RtStrnLen(Src, Len);
    111     if (Size != Len)
    112 	RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
    113     RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
    114     return Dest + Size;
    115 }
    116 
    117 #ifndef __GNUC__
    118 #pragma RUNTIME_CODE(RtStrCat)
    119 #endif
    120 VOID
    121 RUNTIMEFUNCTION
    122 RtStrCat (
    123     IN CHAR16   *Dest,
    124     IN CONST CHAR16   *Src
    125     )
    126 {
    127     RtStrCpy(Dest+StrLen(Dest), Src);
    128 }
    129 
    130 #ifndef __GNUC__
    131 #pragma RUNTIME_CODE(RtStrCat)
    132 #endif
    133 VOID
    134 RUNTIMEFUNCTION
    135 RtStrnCat (
    136     IN CHAR16   *Dest,
    137     IN CONST CHAR16   *Src,
    138     IN UINTN    Len
    139     )
    140 {
    141     RtStrnCpy(Dest+StrLen(Dest), Src, Len);
    142 }
    143 
    144 #ifndef __GNUC__
    145 #pragma RUNTIME_CODE(RtStrLen)
    146 #endif
    147 UINTN
    148 RUNTIMEFUNCTION
    149 RtStrLen (
    150     IN CONST CHAR16   *s1
    151     )
    152 // string length
    153 {
    154     UINTN        len;
    155 
    156     for (len=0; *s1; s1+=1, len+=1) ;
    157     return len;
    158 }
    159 
    160 #ifndef __GNUC__
    161 #pragma RUNTIME_CODE(RtStrnLen)
    162 #endif
    163 UINTN
    164 RUNTIMEFUNCTION
    165 RtStrnLen (
    166     IN CONST CHAR16   *s1,
    167     IN UINTN           Len
    168     )
    169 // copy strings
    170 {
    171     UINTN i;
    172     for (i = 0; *s1 && i < Len; i++)
    173 	    s1++;
    174     return i;
    175 }
    176 
    177 #ifndef __GNUC__
    178 #pragma RUNTIME_CODE(RtStrSize)
    179 #endif
    180 UINTN
    181 RUNTIMEFUNCTION
    182 RtStrSize (
    183     IN CONST CHAR16   *s1
    184     )
    185 // string size
    186 {
    187     UINTN        len;
    188 
    189     for (len=0; *s1; s1+=1, len+=1) ;
    190     return (len + 1) * sizeof(CHAR16);
    191 }
    192 
    193 #ifndef __GNUC__
    194 #pragma RUNTIME_CODE(RtBCDtoDecimal)
    195 #endif
    196 UINT8
    197 RUNTIMEFUNCTION
    198 RtBCDtoDecimal(
    199     IN  UINT8 BcdValue
    200     )
    201 {
    202     UINTN   High, Low;
    203 
    204     High    = BcdValue >> 4;
    205     Low     = BcdValue - (High << 4);
    206 
    207     return ((UINT8)(Low + (High * 10)));
    208 }
    209 
    210 
    211 #ifndef __GNUC__
    212 #pragma RUNTIME_CODE(RtDecimaltoBCD)
    213 #endif
    214 UINT8
    215 RUNTIMEFUNCTION
    216 RtDecimaltoBCD (
    217     IN  UINT8 DecValue
    218     )
    219 {
    220     UINTN   High, Low;
    221 
    222     High    = DecValue / 10;
    223     Low     = DecValue - (High * 10);
    224 
    225     return ((UINT8)(Low + (High << 4)));
    226 }
    227 
    228 
    229