1 /*++
2
3 Copyright (c) 1998 Intel Corporation
4
5 Module Name:
6
7 str.c
8
9 Abstract:
10
11 String runtime functions
12
13
14 Revision History
15
16 --*/
17
18 #include "lib.h"
19
20 #ifndef __GNUC__
21 #pragma RUNTIME_CODE(RtAcquireLock)
22 #endif
23 INTN
24 RUNTIMEFUNCTION
RtStrCmp(IN CONST CHAR16 * s1,IN CONST CHAR16 * s2)25 RtStrCmp (
26 IN CONST CHAR16 *s1,
27 IN CONST CHAR16 *s2
28 )
29 // compare strings
30 {
31 while (*s1) {
32 if (*s1 != *s2) {
33 break;
34 }
35
36 s1 += 1;
37 s2 += 1;
38 }
39
40 return *s1 - *s2;
41 }
42
43 #ifndef __GNUC__
44 #pragma RUNTIME_CODE(RtStrCpy)
45 #endif
46 VOID
47 RUNTIMEFUNCTION
RtStrCpy(IN CHAR16 * Dest,IN CONST CHAR16 * Src)48 RtStrCpy (
49 IN CHAR16 *Dest,
50 IN CONST CHAR16 *Src
51 )
52 // copy strings
53 {
54 while (*Src) {
55 *(Dest++) = *(Src++);
56 }
57 *Dest = 0;
58 }
59
60 #ifndef __GNUC__
61 #pragma RUNTIME_CODE(RtStrCat)
62 #endif
63 VOID
64 RUNTIMEFUNCTION
RtStrCat(IN CHAR16 * Dest,IN CONST CHAR16 * Src)65 RtStrCat (
66 IN CHAR16 *Dest,
67 IN CONST CHAR16 *Src
68 )
69 {
70 RtStrCpy(Dest+StrLen(Dest), Src);
71 }
72
73 #ifndef __GNUC__
74 #pragma RUNTIME_CODE(RtStrLen)
75 #endif
76 UINTN
77 RUNTIMEFUNCTION
RtStrLen(IN CONST CHAR16 * s1)78 RtStrLen (
79 IN CONST CHAR16 *s1
80 )
81 // string length
82 {
83 UINTN len;
84
85 for (len=0; *s1; s1+=1, len+=1) ;
86 return len;
87 }
88
89 #ifndef __GNUC__
90 #pragma RUNTIME_CODE(RtStrSize)
91 #endif
92 UINTN
93 RUNTIMEFUNCTION
RtStrSize(IN CONST CHAR16 * s1)94 RtStrSize (
95 IN CONST CHAR16 *s1
96 )
97 // string size
98 {
99 UINTN len;
100
101 for (len=0; *s1; s1+=1, len+=1) ;
102 return (len + 1) * sizeof(CHAR16);
103 }
104
105 #ifndef __GNUC__
106 #pragma RUNTIME_CODE(RtBCDtoDecimal)
107 #endif
108 UINT8
109 RUNTIMEFUNCTION
RtBCDtoDecimal(IN UINT8 BcdValue)110 RtBCDtoDecimal(
111 IN UINT8 BcdValue
112 )
113 {
114 UINTN High, Low;
115
116 High = BcdValue >> 4;
117 Low = BcdValue - (High << 4);
118
119 return ((UINT8)(Low + (High * 10)));
120 }
121
122
123 #ifndef __GNUC__
124 #pragma RUNTIME_CODE(RtDecimaltoBCD)
125 #endif
126 UINT8
127 RUNTIMEFUNCTION
RtDecimaltoBCD(IN UINT8 DecValue)128 RtDecimaltoBCD (
129 IN UINT8 DecValue
130 )
131 {
132 UINTN High, Low;
133
134 High = DecValue / 10;
135 Low = DecValue - (High * 10);
136
137 return ((UINT8)(Low + (High << 4)));
138 }
139
140
141