1 /** @file
2 String routines implementation
3 
4 Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef _EFI_STRING_FUNCS_H
16 #define _EFI_STRING_FUNCS_H
17 
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <Common/UefiBaseTypes.h>
21 
22 //
23 // Common data structures
24 //
25 typedef struct {
26   UINTN      Count;
27   //
28   // Actually this array can be 0 or more items (based on Count)
29   //
30   CHAR8*     Strings[1];
31 } STRING_LIST;
32 
33 
34 //
35 // Functions declarations
36 //
37 
38 CHAR8*
39 CloneString (
40   IN CHAR8       *String
41   )
42 ;
43 /**
44 
45 Routine Description:
46 
47   Allocates a new string and copies 'String' to clone it
48 
49 Arguments:
50 
51   String          The string to clone
52 
53 Returns:
54 
55   CHAR8* - NULL if there are not enough resources
56 
57 **/
58 
59 
60 EFI_STATUS
61 StripInfDscStringInPlace (
62   IN CHAR8       *String
63   )
64 ;
65 /**
66 
67 Routine Description:
68 
69   Remove all comments, leading and trailing whitespace from the string.
70 
71 Arguments:
72 
73   Strin          The string to 'strip'
74 
75 Returns:
76 
77   EFI_STATUS
78 
79 **/
80 
81 
82 STRING_LIST*
83 SplitStringByWhitespace (
84   IN CHAR8       *String
85   )
86 ;
87 /**
88 
89 Routine Description:
90 
91   Creates and returns a 'split' STRING_LIST by splitting the string
92   on whitespace boundaries.
93 
94 Arguments:
95 
96   String          The string to 'split'
97 
98 Returns:
99 
100   EFI_STATUS
101 
102 **/
103 
104 
105 STRING_LIST*
106 NewStringList (
107   )
108 ;
109 /**
110 
111 Routine Description:
112 
113   Creates a new STRING_LIST with 0 strings.
114 
115 Returns:
116 
117   STRING_LIST* - Null if there is not enough resources to create the object.
118 
119 **/
120 
121 
122 EFI_STATUS
123 AppendCopyOfStringToList (
124   IN OUT STRING_LIST **StringList,
125   IN CHAR8       *String
126   )
127 ;
128 /**
129 
130 Routine Description:
131 
132   Adds String to StringList.  A new copy of String is made before it is
133   added to StringList.
134 
135 Returns:
136 
137   EFI_STATUS
138 
139 **/
140 
141 
142 EFI_STATUS
143 RemoveLastStringFromList (
144   IN STRING_LIST       *StringList
145   )
146 ;
147 /**
148 
149 Routine Description:
150 
151   Removes the last string from StringList and frees the memory associated
152   with it.
153 
154 Arguments:
155 
156   StringList        The string list to remove the string from
157 
158 Returns:
159 
160   EFI_STATUS
161 
162 **/
163 
164 
165 STRING_LIST*
166 AllocateStringListStruct (
167   IN UINTN StringCount
168   )
169 ;
170 /**
171 
172 Routine Description:
173 
174   Allocates a STRING_LIST structure that can store StringCount strings.
175 
176 Arguments:
177 
178   StringCount        The number of strings that need to be stored
179 
180 Returns:
181 
182   EFI_STATUS
183 
184 **/
185 
186 
187 VOID
188 FreeStringList (
189   IN STRING_LIST       *StringList
190   )
191 ;
192 /**
193 
194 Routine Description:
195 
196   Frees all memory associated with StringList.
197 
198 Arguments:
199 
200   StringList        The string list to free
201 
202 Returns:
203 
204   EFI_STATUS
205 
206 **/
207 
208 
209 CHAR8*
210 StringListToString (
211   IN STRING_LIST       *StringList
212   )
213 ;
214 /**
215 
216 Routine Description:
217 
218   Generates a string that represents the STRING_LIST
219 
220 Arguments:
221 
222   StringList        The string list to convert to a string
223 
224 Returns:
225 
226   CHAR8* - The string list represented with a single string.  The returned
227            string must be freed by the caller.
228 
229 **/
230 
231 
232 VOID
233 PrintStringList (
234   IN STRING_LIST       *StringList
235   )
236 ;
237 /**
238 
239 Routine Description:
240 
241   Prints out the string list
242 
243 Arguments:
244 
245   StringList        The string list to print
246 
247 **/
248 
249 
250 #endif
251