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