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