]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/Common/CommonLib.h
BaseTools/CommonLib: get rid of 'native' type string parsing routines
[mirror_edk2.git] / BaseTools / Source / C / Common / CommonLib.h
CommitLineData
30fdf114 1/** @file\r
97fa0ee9 2Common library assistance routines.\r
30fdf114 3\r
e4fb8f1d 4Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
40d841f6 5This program and the accompanying materials\r
30fdf114
LG
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
30fdf114
LG
13**/\r
14\r
15#ifndef _EFI_COMMON_LIB_H\r
16#define _EFI_COMMON_LIB_H\r
17\r
18#include <Common/UefiBaseTypes.h>\r
b36d134f 19#include <Common/BuildVersion.h>\r
7dbc50bd 20#include <assert.h>\r
30fdf114 21#define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination\r
1be2ed90
HC
22\r
23#define MAX_LONG_FILE_PATH 500\r
24\r
7dbc50bd
YZ
25#define MAX_UINTN MAX_ADDRESS\r
26#define MAX_UINT64 ((UINT64)0xFFFFFFFFFFFFFFFFULL)\r
4d393eb8 27#define MAX_UINT32 ((UINT32)0xFFFFFFFF)\r
7dbc50bd
YZ
28#define MAX_UINT16 ((UINT16)0xFFFF)\r
29#define MAX_UINT8 ((UINT8)0xFF)\r
30#define ARRAY_SIZE(Array) (sizeof (Array) / sizeof ((Array)[0]))\r
31#define ASCII_RSIZE_MAX 1000000\r
e4fb8f1d 32#undef RSIZE_MAX\r
7dbc50bd 33#define RSIZE_MAX 1000000\r
7dbc50bd
YZ
34\r
35#define IS_COMMA(a) ((a) == L',')\r
36#define IS_HYPHEN(a) ((a) == L'-')\r
37#define IS_DOT(a) ((a) == L'.')\r
38#define IS_LEFT_PARENTH(a) ((a) == L'(')\r
39#define IS_RIGHT_PARENTH(a) ((a) == L')')\r
40#define IS_SLASH(a) ((a) == L'/')\r
41#define IS_NULL(a) ((a) == L'\0')\r
42\r
43#define ASSERT(x) assert(x)\r
44\r
1be2ed90
HC
45#ifdef __cplusplus\r
46extern "C" {\r
47#endif\r
97fa0ee9 48\r
30fdf114
LG
49//\r
50// Function declarations\r
51//\r
52VOID\r
53PeiZeroMem (\r
54 IN VOID *Buffer,\r
55 IN UINTN Size\r
56 )\r
57;\r
58\r
59VOID\r
60PeiCopyMem (\r
61 IN VOID *Destination,\r
62 IN VOID *Source,\r
63 IN UINTN Length\r
64 )\r
65;\r
66\r
67VOID\r
68ZeroMem (\r
69 IN VOID *Buffer,\r
70 IN UINTN Size\r
71 )\r
72;\r
73\r
74VOID\r
75CopyMem (\r
76 IN VOID *Destination,\r
77 IN VOID *Source,\r
78 IN UINTN Length\r
79 )\r
80;\r
81\r
82INTN\r
83CompareGuid (\r
84 IN EFI_GUID *Guid1,\r
85 IN EFI_GUID *Guid2\r
86 )\r
87;\r
88\r
89EFI_STATUS\r
90GetFileImage (\r
91 IN CHAR8 *InputFileName,\r
92 OUT CHAR8 **InputFileImage,\r
93 OUT UINT32 *BytesRead\r
94 )\r
95;\r
96\r
97EFI_STATUS\r
98PutFileImage (\r
99 IN CHAR8 *OutputFileName,\r
100 IN CHAR8 *OutputFileImage,\r
101 IN UINT32 BytesToWrite\r
102 )\r
103;\r
104/*++\r
105\r
106Routine Description:\r
107\r
108 This function opens a file and writes OutputFileImage into the file.\r
109\r
110Arguments:\r
111\r
112 OutputFileName The name of the file to write.\r
113 OutputFileImage A pointer to the memory buffer.\r
114 BytesToWrite The size of the memory buffer.\r
115\r
116Returns:\r
117\r
118 EFI_SUCCESS The function completed successfully.\r
119 EFI_INVALID_PARAMETER One of the input parameters was invalid.\r
120 EFI_ABORTED An error occurred.\r
121 EFI_OUT_OF_RESOURCES No resource to complete operations.\r
122\r
123**/\r
124\r
125UINT8\r
126CalculateChecksum8 (\r
127 IN UINT8 *Buffer,\r
128 IN UINTN Size\r
129 )\r
130;\r
131\r
132UINT8\r
133CalculateSum8 (\r
134 IN UINT8 *Buffer,\r
135 IN UINTN Size\r
136 )\r
137;\r
138\r
139UINT16\r
140CalculateChecksum16 (\r
141 IN UINT16 *Buffer,\r
142 IN UINTN Size\r
143 )\r
144;\r
145\r
146UINT16\r
147CalculateSum16 (\r
148 IN UINT16 *Buffer,\r
149 IN UINTN Size\r
150 )\r
151;\r
152\r
153EFI_STATUS\r
154PrintGuid (\r
155 IN EFI_GUID *Guid\r
156 )\r
157;\r
158\r
159#define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination\r
160EFI_STATUS\r
161PrintGuidToBuffer (\r
162 IN EFI_GUID *Guid,\r
163 IN OUT UINT8 *Buffer,\r
164 IN UINT32 BufferLen,\r
165 IN BOOLEAN Uppercase\r
166 )\r
167;\r
168\r
1be2ed90
HC
169CHAR8 *\r
170LongFilePath (\r
171 IN CHAR8 *FileName\r
172);\r
7dbc50bd
YZ
173\r
174UINTN\r
175StrLen (\r
176 CONST CHAR16 *String\r
177 );\r
178\r
179VOID *\r
180AllocateCopyPool (\r
181 UINTN AllocationSize,\r
182 CONST VOID *Buffer\r
183 );\r
184\r
185INTN\r
186StrnCmp (\r
187 CONST CHAR16 *FirstString,\r
188 CONST CHAR16 *SecondString,\r
189 UINTN Length\r
190 );\r
191\r
192RETURN_STATUS\r
193StrToGuid (\r
194 CONST CHAR16 *String,\r
195 EFI_GUID *Guid\r
196 );\r
197\r
198RETURN_STATUS\r
199StrHexToBytes (\r
200 CONST CHAR16 *String,\r
201 UINTN Length,\r
202 UINT8 *Buffer,\r
203 UINTN MaxBufferSize\r
204 );\r
205\r
206UINTN\r
207InternalHexCharToUintn (\r
208 CHAR16 Char\r
209 );\r
210\r
211VOID *\r
212InternalAllocateCopyPool (\r
213 UINTN AllocationSize,\r
214 CONST VOID *Buffer\r
215 );\r
216\r
217BOOLEAN\r
218InternalIsDecimalDigitCharacter (\r
219 CHAR16 Char\r
220 );\r
221\r
222UINT32\r
223SwapBytes32 (\r
224 UINT32 Value\r
225 );\r
226\r
227UINT16\r
228SwapBytes16 (\r
229 UINT16 Value\r
230 );\r
231\r
232EFI_GUID *\r
233CopyGuid (\r
234 EFI_GUID *DestinationGuid,\r
235 CONST EFI_GUID *SourceGuid\r
236 );\r
237\r
238UINT64\r
239WriteUnaligned64 (\r
240 UINT64 *Buffer,\r
241 UINT64 Value\r
242 );\r
243\r
244UINT64\r
245ReadUnaligned64 (\r
246 CONST UINT64 *Buffer\r
247 );\r
248\r
249UINTN\r
250StrSize (\r
251 CONST CHAR16 *String\r
252 );\r
253\r
7dbc50bd
YZ
254UINT64\r
255StrHexToUint64 (\r
256 CONST CHAR16 *String\r
257 );\r
258\r
259UINT64\r
260StrDecimalToUint64 (\r
261 CONST CHAR16 *String\r
262 );\r
263\r
264RETURN_STATUS\r
265StrHexToUint64S (\r
266 CONST CHAR16 *String,\r
267 CHAR16 **EndPointer,\r
268 UINT64 *Data\r
269 );\r
270\r
7dbc50bd
YZ
271RETURN_STATUS\r
272StrDecimalToUint64S (\r
273 CONST CHAR16 *String,\r
274 CHAR16 **EndPointer, OPTIONAL\r
275 UINT64 *Data\r
276 );\r
277\r
7dbc50bd
YZ
278VOID *\r
279ReallocatePool (\r
280 UINTN OldSize,\r
281 UINTN NewSize,\r
282 VOID *OldBuffer OPTIONAL\r
283 );\r
284\r
285VOID *\r
286InternalReallocatePool (\r
287 UINTN OldSize,\r
288 UINTN NewSize,\r
289 VOID *OldBuffer OPTIONAL\r
290 );\r
291\r
292VOID *\r
293InternalAllocateZeroPool (\r
294 UINTN AllocationSize\r
295 ) ;\r
296\r
297VOID *\r
298InternalAllocatePool (\r
299 UINTN AllocationSize\r
300 );\r
301\r
302UINTN\r
303StrnLenS (\r
304 CONST CHAR16 *String,\r
305 UINTN MaxSize\r
306 );\r
307\r
308CHAR16\r
309InternalCharToUpper (\r
310 CHAR16 Char\r
311 );\r
312\r
313INTN\r
314StrCmp (\r
315 CONST CHAR16 *FirstString,\r
316 CONST CHAR16 *SecondString\r
317 );\r
318\r
319UINT64\r
320SwapBytes64 (\r
321 UINT64 Value\r
322 );\r
323\r
324UINT64\r
325InternalMathSwapBytes64 (\r
326 UINT64 Operand\r
327 );\r
328\r
329RETURN_STATUS\r
330StrToIpv4Address (\r
331 CONST CHAR16 *String,\r
332 CHAR16 **EndPointer,\r
333 EFI_IPv4_ADDRESS *Address,\r
334 UINT8 *PrefixLength\r
335 );\r
336\r
337RETURN_STATUS\r
338StrToIpv6Address (\r
339 CONST CHAR16 *String,\r
340 CHAR16 **EndPointer,\r
341 EFI_IPv6_ADDRESS *Address,\r
342 UINT8 *PrefixLength\r
343 );\r
344\r
345RETURN_STATUS\r
346StrCpyS (\r
347 CHAR16 *Destination,\r
348 UINTN DestMax,\r
349 CONST CHAR16 *Source\r
350 );\r
351\r
352RETURN_STATUS\r
353UnicodeStrToAsciiStrS (\r
354 CONST CHAR16 *Source,\r
355 CHAR8 *Destination,\r
356 UINTN DestMax\r
357 );\r
358VOID *\r
359AllocatePool (\r
360 UINTN AllocationSize\r
361 );\r
362\r
363UINT16\r
364WriteUnaligned16 (\r
365 UINT16 *Buffer,\r
366 UINT16 Value\r
367 );\r
368\r
369UINT16\r
370ReadUnaligned16 (\r
371 CONST UINT16 *Buffer\r
372 );\r
373\r
374VOID *\r
375AllocateZeroPool (\r
376 UINTN AllocationSize\r
377 );\r
378\r
379BOOLEAN\r
380InternalIsHexaDecimalDigitCharacter (\r
381 CHAR16 Char\r
382 );\r
383\r
384BOOLEAN\r
385InternalSafeStringIsOverlap (\r
386 IN VOID *Base1,\r
387 IN UINTN Size1,\r
388 IN VOID *Base2,\r
389 IN UINTN Size2\r
390 );\r
391\r
392BOOLEAN\r
393InternalSafeStringNoStrOverlap (\r
394 IN CHAR16 *Str1,\r
395 IN UINTN Size1,\r
396 IN CHAR16 *Str2,\r
397 IN UINTN Size2\r
398 );\r
399\r
400BOOLEAN\r
401IsHexStr (\r
402 CHAR16 *Str\r
403 );\r
404\r
405UINTN\r
406Strtoi (\r
407 CHAR16 *Str\r
408 );\r
409\r
410VOID\r
411Strtoi64 (\r
412 CHAR16 *Str,\r
413 UINT64 *Data\r
414 );\r
415\r
416VOID\r
417StrToAscii (\r
418 CHAR16 *Str,\r
419 CHAR8 **AsciiStr\r
420 );\r
421\r
422CHAR16 *\r
423SplitStr (\r
424 CHAR16 **List,\r
425 CHAR16 Separator\r
426 );\r
427\r
1be2ed90
HC
428/*++\r
429\r
430Routine Description:\r
f7496d71 431 Convert FileName to the long file path, which can support larger than 260 length.\r
1be2ed90
HC
432\r
433Arguments:\r
f7496d71 434 FileName - FileName.\r
1be2ed90
HC
435\r
436Returns:\r
437 LongFilePath A pointer to the converted long file path.\r
f7496d71 438\r
1be2ed90
HC
439--*/\r
440\r
441#ifdef __cplusplus\r
442}\r
443#endif\r
444\r
30fdf114
LG
445#ifdef __GNUC__\r
446#include <stdio.h>\r
447#include <sys/stat.h>\r
448#define stricmp strcasecmp\r
449#define _stricmp strcasecmp\r
450#define strnicmp strncasecmp\r
451#define strcmpi strcasecmp\r
452size_t _filelength(int fd);\r
453#ifndef __CYGWIN__\r
454char *strlwr(char *s);\r
455#endif\r
456#endif\r
457\r
458//\r
459// On windows, mkdir only has one parameter.\r
460// On unix, it has two parameters\r
461//\r
462#if defined(__GNUC__)\r
463#define mkdir(dir, perm) mkdir(dir, perm)\r
464#else\r
465#define mkdir(dir, perm) mkdir(dir)\r
466#endif\r
467\r
468#endif\r