]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Library/Include/CrtLibSupport.h
CryptoPkg/CrtLibSupport: add MODULESDIR
[mirror_edk2.git] / CryptoPkg / Library / Include / CrtLibSupport.h
CommitLineData
fc9fa685
QL
1/** @file\r
2 Root include file of C runtime library to support building the third-party\r
3 cryptographic library.\r
4\r
c1e66210 5Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>\r
9025a014 6Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
2009f6b4 7SPDX-License-Identifier: BSD-2-Clause-Patent\r
fc9fa685
QL
8\r
9**/\r
10\r
11#ifndef __CRT_LIB_SUPPORT_H__\r
12#define __CRT_LIB_SUPPORT_H__\r
13\r
14#include <Library/BaseLib.h>\r
15#include <Library/BaseMemoryLib.h>\r
16#include <Library/DebugLib.h>\r
17#include <Library/PrintLib.h>\r
18\r
7c342378
MK
19#define OPENSSLDIR ""\r
20#define ENGINESDIR ""\r
fd5f347c 21#define MODULESDIR ""\r
fc9fa685
QL
22\r
23#define MAX_STRING_SIZE 0x1000\r
24\r
456dd8b9
XL
25//\r
26// We already have "no-ui" in out Configure invocation.\r
27// but the code still fails to compile.\r
28// Ref: https://github.com/openssl/openssl/issues/8904\r
29//\r
30// This is defined in CRT library(stdio.h).\r
31//\r
32#ifndef BUFSIZ\r
33#define BUFSIZ 8192\r
34#endif\r
35\r
fc9fa685
QL
36//\r
37// OpenSSL relies on explicit configuration for word size in crypto/bn,\r
38// but we want it to be automatically inferred from the target. So we\r
39// bypass what's in <openssl/opensslconf.h> for OPENSSL_SYS_UEFI, and\r
40// define our own here.\r
41//\r
42#ifdef CONFIG_HEADER_BN_H\r
7c342378 43 #error CONFIG_HEADER_BN_H already defined\r
fc9fa685
QL
44#endif\r
45\r
46#define CONFIG_HEADER_BN_H\r
47\r
7c342378
MK
48#if !defined (SIXTY_FOUR_BIT) && !defined (THIRTY_TWO_BIT)\r
49 #if defined (MDE_CPU_X64) || defined (MDE_CPU_AARCH64) || defined (MDE_CPU_IA64) || defined (MDE_CPU_RISCV64)\r
fc9fa685
QL
50//\r
51// With GCC we would normally use SIXTY_FOUR_BIT_LONG, but MSVC needs\r
52// SIXTY_FOUR_BIT, because 'long' is 32-bit and only 'long long' is\r
53// 64-bit. Since using 'long long' works fine on GCC too, just do that.\r
54//\r
55#define SIXTY_FOUR_BIT\r
7c342378 56 #elif defined (MDE_CPU_IA32) || defined (MDE_CPU_ARM) || defined (MDE_CPU_EBC)\r
fc9fa685 57#define THIRTY_TWO_BIT\r
7c342378
MK
58 #else\r
59 #error Unknown target architecture\r
60 #endif\r
d0bf83e1 61#endif\r
fc9fa685
QL
62\r
63//\r
64// Map all va_xxxx elements to VA_xxx defined in MdePkg/Include/Base.h\r
65//\r
7c342378 66#if !defined (__CC_ARM) // if va_list is not already defined\r
fc9fa685
QL
67#define va_list VA_LIST\r
68#define va_arg VA_ARG\r
69#define va_start VA_START\r
70#define va_end VA_END\r
71#else // __CC_ARM\r
7c342378
MK
72#define va_start(Marker, Parameter) __va_start(Marker, Parameter)\r
73#define va_arg(Marker, TYPE) __va_arg(Marker, TYPE)\r
74#define va_end(Marker) ((void)0)\r
fc9fa685
QL
75#endif\r
76\r
77//\r
78// Definitions for global constants used by CRT library routines\r
79//\r
7c342378
MK
80#define EINVAL 22 /* Invalid argument */\r
81#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */\r
82#define INT_MAX 0x7FFFFFFF /* Maximum (signed) int value */\r
58771f4b 83#define INT_MIN (-INT_MAX-1) /* Minimum (signed) int value */\r
7c342378
MK
84#define LONG_MAX 0X7FFFFFFFL /* max value for a long */\r
85#define LONG_MIN (-LONG_MAX-1) /* min value for a long */\r
2759e42f 86#define UINT_MAX 0xFFFFFFFF /* Maximum unsigned int value */\r
7c342378
MK
87#define ULONG_MAX 0xFFFFFFFF /* Maximum unsigned long value */\r
88#define CHAR_BIT 8 /* Number of bits in a char */\r
fc9fa685 89\r
2ac41c12
LE
90//\r
91// Address families.\r
92//\r
93#define AF_INET 2 /* internetwork: UDP, TCP, etc. */\r
94#define AF_INET6 24 /* IP version 6 */\r
95\r
96//\r
97// Define constants based on RFC0883, RFC1034, RFC 1035\r
98//\r
99#define NS_INT16SZ 2 /*%< #/bytes of data in a u_int16_t */\r
100#define NS_INADDRSZ 4 /*%< IPv4 T_A */\r
101#define NS_IN6ADDRSZ 16 /*%< IPv6 T_AAAA */\r
102\r
fc9fa685
QL
103//\r
104// Basic types mapping\r
105//\r
7c342378
MK
106typedef UINTN size_t;\r
107typedef UINTN u_int;\r
108typedef INTN ptrdiff_t;\r
109typedef INTN ssize_t;\r
110typedef INT32 time_t;\r
111typedef UINT8 __uint8_t;\r
112typedef UINT8 sa_family_t;\r
113typedef UINT8 u_char;\r
114typedef UINT32 uid_t;\r
115typedef UINT32 gid_t;\r
116typedef CHAR16 wchar_t;\r
fc9fa685
QL
117\r
118//\r
119// File operations are not required for EFI building,\r
120// so FILE is mapped to VOID * to pass build\r
121//\r
7c342378 122typedef VOID *FILE;\r
fc9fa685
QL
123\r
124//\r
125// Structures Definitions\r
126//\r
127struct tm {\r
7c342378
MK
128 int tm_sec; /* seconds after the minute [0-60] */\r
129 int tm_min; /* minutes after the hour [0-59] */\r
130 int tm_hour; /* hours since midnight [0-23] */\r
131 int tm_mday; /* day of the month [1-31] */\r
132 int tm_mon; /* months since January [0-11] */\r
133 int tm_year; /* years since 1900 */\r
134 int tm_wday; /* days since Sunday [0-6] */\r
135 int tm_yday; /* days since January 1 [0-365] */\r
136 int tm_isdst; /* Daylight Savings Time flag */\r
137 long tm_gmtoff; /* offset from CUT in seconds */\r
138 char *tm_zone; /* timezone abbreviation */\r
fc9fa685
QL
139};\r
140\r
141struct timeval {\r
7c342378
MK
142 long tv_sec; /* time value, in seconds */\r
143 long tv_usec; /* time value, in microseconds */\r
fc9fa685
QL
144};\r
145\r
146struct sockaddr {\r
7c342378
MK
147 __uint8_t sa_len; /* total length */\r
148 sa_family_t sa_family; /* address family */\r
149 char sa_data[14]; /* actually longer; address value */\r
fc9fa685
QL
150};\r
151\r
152//\r
153// Global variables\r
154//\r
7c342378
MK
155extern int errno;\r
156extern FILE *stderr;\r
fc9fa685
QL
157\r
158//\r
159// Function prototypes of CRT Library routines\r
160//\r
7c342378
MK
161void *\r
162malloc (\r
163 size_t\r
164 );\r
165\r
166void *\r
167realloc (\r
168 void *,\r
169 size_t\r
170 );\r
171\r
172void\r
173free (\r
174 void *\r
175 );\r
176\r
177void *\r
178memset (\r
179 void *,\r
180 int,\r
181 size_t\r
182 );\r
183\r
184int\r
185memcmp (\r
186 const void *,\r
187 const void *,\r
188 size_t\r
189 );\r
190\r
191int\r
192isdigit (\r
193 int\r
194 );\r
195\r
196int\r
197isspace (\r
198 int\r
199 );\r
200\r
201int\r
202isxdigit (\r
203 int\r
204 );\r
205\r
206int\r
207isalnum (\r
208 int\r
209 );\r
210\r
211int\r
212isupper (\r
213 int\r
214 );\r
215\r
216int\r
217tolower (\r
218 int\r
219 );\r
220\r
221int\r
222strcmp (\r
223 const char *,\r
224 const char *\r
225 );\r
226\r
227int\r
228strncasecmp (\r
229 const char *,\r
230 const char *,\r
231 size_t\r
232 );\r
233\r
234char *\r
235strchr (\r
236 const char *,\r
237 int\r
238 );\r
239\r
240char *\r
241strrchr (\r
242 const char *,\r
243 int\r
244 );\r
245\r
246unsigned long\r
247strtoul (\r
248 const char *,\r
249 char **,\r
250 int\r
251 );\r
252\r
253long\r
254strtol (\r
255 const char *,\r
256 char **,\r
257 int\r
258 );\r
259\r
260char *\r
261strerror (\r
262 int\r
263 );\r
264\r
265size_t\r
266strspn (\r
267 const char *,\r
268 const char *\r
269 );\r
270\r
271size_t\r
272strcspn (\r
273 const char *,\r
274 const char *\r
275 );\r
276\r
277int\r
278printf (\r
279 const char *,\r
280 ...\r
281 );\r
282\r
283int\r
284sscanf (\r
285 const char *,\r
286 const char *,\r
287 ...\r
288 );\r
289\r
290FILE *\r
291fopen (\r
292 const char *,\r
293 const char *\r
294 );\r
295\r
296size_t\r
297fread (\r
298 void *,\r
299 size_t,\r
300 size_t,\r
301 FILE *\r
302 );\r
303\r
304size_t\r
305fwrite (\r
306 const void *,\r
307 size_t,\r
308 size_t,\r
309 FILE *\r
310 );\r
311\r
312int\r
313fclose (\r
314 FILE *\r
315 );\r
316\r
317int\r
318fprintf (\r
319 FILE *,\r
320 const char *,\r
321 ...\r
322 );\r
323\r
324time_t\r
325time (\r
326 time_t *\r
327 );\r
328\r
329struct tm *\r
330gmtime (\r
331 const time_t *\r
332 );\r
333\r
334uid_t\r
335getuid (\r
336 void\r
337 );\r
338\r
339uid_t\r
340geteuid (\r
341 void\r
342 );\r
343\r
344gid_t\r
345getgid (\r
346 void\r
347 );\r
348\r
349gid_t\r
350getegid (\r
351 void\r
352 );\r
353\r
354int\r
355issetugid (\r
356 void\r
357 );\r
358\r
359void\r
360qsort (\r
361 void *,\r
362 size_t,\r
363 size_t,\r
364 int (*)(const void *, const void *)\r
365 );\r
366\r
367char *\r
368getenv (\r
369 const char *\r
370 );\r
371\r
372char *\r
373secure_getenv (\r
374 const char *\r
375 );\r
376\r
377#if defined (__GNUC__) && (__GNUC__ >= 2)\r
378void\r
379abort (\r
380 void\r
381 ) __attribute__ ((__noreturn__));\r
382\r
fc9fa685 383#else\r
7c342378
MK
384void\r
385abort (\r
386 void\r
387 );\r
388\r
fc9fa685 389#endif\r
7c342378
MK
390int\r
391inet_pton (\r
392 int,\r
393 const char *,\r
394 void *\r
395 );\r
fc9fa685
QL
396\r
397//\r
398// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions\r
399//\r
7c342378
MK
400#define memcpy(dest, source, count) CopyMem(dest,source,(UINTN)(count))\r
401#define memset(dest, ch, count) SetMem(dest,(UINTN)(count),(UINT8)(ch))\r
402#define memchr(buf, ch, count) ScanMem8(buf,(UINTN)(count),(UINT8)ch)\r
403#define memcmp(buf1, buf2, count) (int)(CompareMem(buf1,buf2,(UINTN)(count)))\r
404#define memmove(dest, source, count) CopyMem(dest,source,(UINTN)(count))\r
405#define strlen(str) (size_t)(AsciiStrnLenS(str,MAX_STRING_SIZE))\r
406#define strcpy(strDest, strSource) AsciiStrCpyS(strDest,MAX_STRING_SIZE,strSource)\r
407#define strncpy(strDest, strSource, count) AsciiStrnCpyS(strDest,MAX_STRING_SIZE,strSource,(UINTN)count)\r
408#define strcat(strDest, strSource) AsciiStrCatS(strDest,MAX_STRING_SIZE,strSource)\r
409#define strncmp(string1, string2, count) (int)(AsciiStrnCmp(string1,string2,(UINTN)(count)))\r
410#define strcasecmp(str1, str2) (int)AsciiStriCmp(str1,str2)\r
3b4b49cf 411#define strstr(s1, s2) AsciiStrStr(s1,s2)\r
7c342378
MK
412#define sprintf(buf, ...) AsciiSPrint(buf,MAX_STRING_SIZE,__VA_ARGS__)\r
413#define localtime(timer) NULL\r
fc9fa685 414#define assert(expression)\r
7c342378
MK
415#define offsetof(type, member) OFFSET_OF(type,member)\r
416#define atoi(nptr) AsciiStrDecimalToUintn(nptr)\r
417#define gettimeofday(tvp, tz) do { (tvp)->tv_sec = time(NULL); (tvp)->tv_usec = 0; } while (0)\r
fc9fa685
QL
418\r
419#endif\r