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