]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/Common/CommonLib.h
BaseTools/CommonLib: drop definition of MAX_UINTN
[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 25#define MAX_UINT64 ((UINT64)0xFFFFFFFFFFFFFFFFULL)\r
4d393eb8 26#define MAX_UINT32 ((UINT32)0xFFFFFFFF)\r
7dbc50bd
YZ
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
7dbc50bd
YZ
253UINT64\r
254StrHexToUint64 (\r
255 CONST CHAR16 *String\r
256 );\r
257\r
258UINT64\r
259StrDecimalToUint64 (\r
260 CONST CHAR16 *String\r
261 );\r
262\r
263RETURN_STATUS\r
264StrHexToUint64S (\r
265 CONST CHAR16 *String,\r
266 CHAR16 **EndPointer,\r
267 UINT64 *Data\r
268 );\r
269\r
7dbc50bd
YZ
270RETURN_STATUS\r
271StrDecimalToUint64S (\r
272 CONST CHAR16 *String,\r
273 CHAR16 **EndPointer, OPTIONAL\r
274 UINT64 *Data\r
275 );\r
276\r
7dbc50bd
YZ
277VOID *\r
278ReallocatePool (\r
279 UINTN OldSize,\r
280 UINTN NewSize,\r
281 VOID *OldBuffer OPTIONAL\r
282 );\r
283\r
284VOID *\r
285InternalReallocatePool (\r
286 UINTN OldSize,\r
287 UINTN NewSize,\r
288 VOID *OldBuffer OPTIONAL\r
289 );\r
290\r
291VOID *\r
292InternalAllocateZeroPool (\r
293 UINTN AllocationSize\r
294 ) ;\r
295\r
296VOID *\r
297InternalAllocatePool (\r
298 UINTN AllocationSize\r
299 );\r
300\r
301UINTN\r
302StrnLenS (\r
303 CONST CHAR16 *String,\r
304 UINTN MaxSize\r
305 );\r
306\r
307CHAR16\r
308InternalCharToUpper (\r
309 CHAR16 Char\r
310 );\r
311\r
312INTN\r
313StrCmp (\r
314 CONST CHAR16 *FirstString,\r
315 CONST CHAR16 *SecondString\r
316 );\r
317\r
318UINT64\r
319SwapBytes64 (\r
320 UINT64 Value\r
321 );\r
322\r
323UINT64\r
324InternalMathSwapBytes64 (\r
325 UINT64 Operand\r
326 );\r
327\r
328RETURN_STATUS\r
329StrToIpv4Address (\r
330 CONST CHAR16 *String,\r
331 CHAR16 **EndPointer,\r
332 EFI_IPv4_ADDRESS *Address,\r
333 UINT8 *PrefixLength\r
334 );\r
335\r
336RETURN_STATUS\r
337StrToIpv6Address (\r
338 CONST CHAR16 *String,\r
339 CHAR16 **EndPointer,\r
340 EFI_IPv6_ADDRESS *Address,\r
341 UINT8 *PrefixLength\r
342 );\r
343\r
344RETURN_STATUS\r
345StrCpyS (\r
346 CHAR16 *Destination,\r
347 UINTN DestMax,\r
348 CONST CHAR16 *Source\r
349 );\r
350\r
351RETURN_STATUS\r
352UnicodeStrToAsciiStrS (\r
353 CONST CHAR16 *Source,\r
354 CHAR8 *Destination,\r
355 UINTN DestMax\r
356 );\r
357VOID *\r
358AllocatePool (\r
359 UINTN AllocationSize\r
360 );\r
361\r
362UINT16\r
363WriteUnaligned16 (\r
364 UINT16 *Buffer,\r
365 UINT16 Value\r
366 );\r
367\r
368UINT16\r
369ReadUnaligned16 (\r
370 CONST UINT16 *Buffer\r
371 );\r
372\r
373VOID *\r
374AllocateZeroPool (\r
375 UINTN AllocationSize\r
376 );\r
377\r
378BOOLEAN\r
379InternalIsHexaDecimalDigitCharacter (\r
380 CHAR16 Char\r
381 );\r
382\r
383BOOLEAN\r
384InternalSafeStringIsOverlap (\r
385 IN VOID *Base1,\r
386 IN UINTN Size1,\r
387 IN VOID *Base2,\r
388 IN UINTN Size2\r
389 );\r
390\r
391BOOLEAN\r
392InternalSafeStringNoStrOverlap (\r
393 IN CHAR16 *Str1,\r
394 IN UINTN Size1,\r
395 IN CHAR16 *Str2,\r
396 IN UINTN Size2\r
397 );\r
398\r
399BOOLEAN\r
400IsHexStr (\r
401 CHAR16 *Str\r
402 );\r
403\r
404UINTN\r
405Strtoi (\r
406 CHAR16 *Str\r
407 );\r
408\r
409VOID\r
410Strtoi64 (\r
411 CHAR16 *Str,\r
412 UINT64 *Data\r
413 );\r
414\r
415VOID\r
416StrToAscii (\r
417 CHAR16 *Str,\r
418 CHAR8 **AsciiStr\r
419 );\r
420\r
421CHAR16 *\r
422SplitStr (\r
423 CHAR16 **List,\r
424 CHAR16 Separator\r
425 );\r
426\r
1be2ed90
HC
427/*++\r
428\r
429Routine Description:\r
f7496d71 430 Convert FileName to the long file path, which can support larger than 260 length.\r
1be2ed90
HC
431\r
432Arguments:\r
f7496d71 433 FileName - FileName.\r
1be2ed90
HC
434\r
435Returns:\r
436 LongFilePath A pointer to the converted long file path.\r
f7496d71 437\r
1be2ed90
HC
438--*/\r
439\r
440#ifdef __cplusplus\r
441}\r
442#endif\r
443\r
30fdf114
LG
444#ifdef __GNUC__\r
445#include <stdio.h>\r
446#include <sys/stat.h>\r
447#define stricmp strcasecmp\r
448#define _stricmp strcasecmp\r
449#define strnicmp strncasecmp\r
450#define strcmpi strcasecmp\r
451size_t _filelength(int fd);\r
452#ifndef __CYGWIN__\r
453char *strlwr(char *s);\r
454#endif\r
455#endif\r
456\r
457//\r
458// On windows, mkdir only has one parameter.\r
459// On unix, it has two parameters\r
460//\r
461#if defined(__GNUC__)\r
462#define mkdir(dir, perm) mkdir(dir, perm)\r
463#else\r
464#define mkdir(dir, perm) mkdir(dir)\r
465#endif\r
466\r
467#endif\r