]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Library/Include/CrtLibSupport.h
CryptoPkg/CrtLibSupport: add off_t
[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 106typedef UINTN size_t;\r
03951e56 107typedef UINTN off_t;\r
7c342378
MK
108typedef UINTN u_int;\r
109typedef INTN ptrdiff_t;\r
110typedef INTN ssize_t;\r
111typedef INT32 time_t;\r
112typedef UINT8 __uint8_t;\r
113typedef UINT8 sa_family_t;\r
114typedef UINT8 u_char;\r
115typedef UINT32 uid_t;\r
116typedef UINT32 gid_t;\r
117typedef CHAR16 wchar_t;\r
fc9fa685
QL
118\r
119//\r
120// File operations are not required for EFI building,\r
121// so FILE is mapped to VOID * to pass build\r
122//\r
7c342378 123typedef VOID *FILE;\r
fc9fa685
QL
124\r
125//\r
126// Structures Definitions\r
127//\r
128struct tm {\r
7c342378
MK
129 int tm_sec; /* seconds after the minute [0-60] */\r
130 int tm_min; /* minutes after the hour [0-59] */\r
131 int tm_hour; /* hours since midnight [0-23] */\r
132 int tm_mday; /* day of the month [1-31] */\r
133 int tm_mon; /* months since January [0-11] */\r
134 int tm_year; /* years since 1900 */\r
135 int tm_wday; /* days since Sunday [0-6] */\r
136 int tm_yday; /* days since January 1 [0-365] */\r
137 int tm_isdst; /* Daylight Savings Time flag */\r
138 long tm_gmtoff; /* offset from CUT in seconds */\r
139 char *tm_zone; /* timezone abbreviation */\r
fc9fa685
QL
140};\r
141\r
142struct timeval {\r
7c342378
MK
143 long tv_sec; /* time value, in seconds */\r
144 long tv_usec; /* time value, in microseconds */\r
fc9fa685
QL
145};\r
146\r
147struct sockaddr {\r
7c342378
MK
148 __uint8_t sa_len; /* total length */\r
149 sa_family_t sa_family; /* address family */\r
150 char sa_data[14]; /* actually longer; address value */\r
fc9fa685
QL
151};\r
152\r
153//\r
154// Global variables\r
155//\r
7c342378
MK
156extern int errno;\r
157extern FILE *stderr;\r
fc9fa685
QL
158\r
159//\r
160// Function prototypes of CRT Library routines\r
161//\r
7c342378
MK
162void *\r
163malloc (\r
164 size_t\r
165 );\r
166\r
167void *\r
168realloc (\r
169 void *,\r
170 size_t\r
171 );\r
172\r
173void\r
174free (\r
175 void *\r
176 );\r
177\r
178void *\r
179memset (\r
180 void *,\r
181 int,\r
182 size_t\r
183 );\r
184\r
185int\r
186memcmp (\r
187 const void *,\r
188 const void *,\r
189 size_t\r
190 );\r
191\r
192int\r
193isdigit (\r
194 int\r
195 );\r
196\r
197int\r
198isspace (\r
199 int\r
200 );\r
201\r
202int\r
203isxdigit (\r
204 int\r
205 );\r
206\r
207int\r
208isalnum (\r
209 int\r
210 );\r
211\r
212int\r
213isupper (\r
214 int\r
215 );\r
216\r
217int\r
218tolower (\r
219 int\r
220 );\r
221\r
222int\r
223strcmp (\r
224 const char *,\r
225 const char *\r
226 );\r
227\r
228int\r
229strncasecmp (\r
230 const char *,\r
231 const char *,\r
232 size_t\r
233 );\r
234\r
235char *\r
236strchr (\r
237 const char *,\r
238 int\r
239 );\r
240\r
241char *\r
242strrchr (\r
243 const char *,\r
244 int\r
245 );\r
246\r
247unsigned long\r
248strtoul (\r
249 const char *,\r
250 char **,\r
251 int\r
252 );\r
253\r
254long\r
255strtol (\r
256 const char *,\r
257 char **,\r
258 int\r
259 );\r
260\r
261char *\r
262strerror (\r
263 int\r
264 );\r
265\r
266size_t\r
267strspn (\r
268 const char *,\r
269 const char *\r
270 );\r
271\r
272size_t\r
273strcspn (\r
274 const char *,\r
275 const char *\r
276 );\r
277\r
278int\r
279printf (\r
280 const char *,\r
281 ...\r
282 );\r
283\r
284int\r
285sscanf (\r
286 const char *,\r
287 const char *,\r
288 ...\r
289 );\r
290\r
291FILE *\r
292fopen (\r
293 const char *,\r
294 const char *\r
295 );\r
296\r
297size_t\r
298fread (\r
299 void *,\r
300 size_t,\r
301 size_t,\r
302 FILE *\r
303 );\r
304\r
305size_t\r
306fwrite (\r
307 const void *,\r
308 size_t,\r
309 size_t,\r
310 FILE *\r
311 );\r
312\r
313int\r
314fclose (\r
315 FILE *\r
316 );\r
317\r
318int\r
319fprintf (\r
320 FILE *,\r
321 const char *,\r
322 ...\r
323 );\r
324\r
325time_t\r
326time (\r
327 time_t *\r
328 );\r
329\r
330struct tm *\r
331gmtime (\r
332 const time_t *\r
333 );\r
334\r
335uid_t\r
336getuid (\r
337 void\r
338 );\r
339\r
340uid_t\r
341geteuid (\r
342 void\r
343 );\r
344\r
345gid_t\r
346getgid (\r
347 void\r
348 );\r
349\r
350gid_t\r
351getegid (\r
352 void\r
353 );\r
354\r
355int\r
356issetugid (\r
357 void\r
358 );\r
359\r
360void\r
361qsort (\r
362 void *,\r
363 size_t,\r
364 size_t,\r
365 int (*)(const void *, const void *)\r
366 );\r
367\r
368char *\r
369getenv (\r
370 const char *\r
371 );\r
372\r
373char *\r
374secure_getenv (\r
375 const char *\r
376 );\r
377\r
378#if defined (__GNUC__) && (__GNUC__ >= 2)\r
379void\r
380abort (\r
381 void\r
382 ) __attribute__ ((__noreturn__));\r
383\r
fc9fa685 384#else\r
7c342378
MK
385void\r
386abort (\r
387 void\r
388 );\r
389\r
fc9fa685 390#endif\r
7c342378
MK
391int\r
392inet_pton (\r
393 int,\r
394 const char *,\r
395 void *\r
396 );\r
fc9fa685
QL
397\r
398//\r
399// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions\r
400//\r
7c342378
MK
401#define memcpy(dest, source, count) CopyMem(dest,source,(UINTN)(count))\r
402#define memset(dest, ch, count) SetMem(dest,(UINTN)(count),(UINT8)(ch))\r
403#define memchr(buf, ch, count) ScanMem8(buf,(UINTN)(count),(UINT8)ch)\r
404#define memcmp(buf1, buf2, count) (int)(CompareMem(buf1,buf2,(UINTN)(count)))\r
405#define memmove(dest, source, count) CopyMem(dest,source,(UINTN)(count))\r
406#define strlen(str) (size_t)(AsciiStrnLenS(str,MAX_STRING_SIZE))\r
407#define strcpy(strDest, strSource) AsciiStrCpyS(strDest,MAX_STRING_SIZE,strSource)\r
408#define strncpy(strDest, strSource, count) AsciiStrnCpyS(strDest,MAX_STRING_SIZE,strSource,(UINTN)count)\r
409#define strcat(strDest, strSource) AsciiStrCatS(strDest,MAX_STRING_SIZE,strSource)\r
410#define strncmp(string1, string2, count) (int)(AsciiStrnCmp(string1,string2,(UINTN)(count)))\r
411#define strcasecmp(str1, str2) (int)AsciiStriCmp(str1,str2)\r
3b4b49cf 412#define strstr(s1, s2) AsciiStrStr(s1,s2)\r
7c342378
MK
413#define sprintf(buf, ...) AsciiSPrint(buf,MAX_STRING_SIZE,__VA_ARGS__)\r
414#define localtime(timer) NULL\r
fc9fa685 415#define assert(expression)\r
7c342378
MK
416#define offsetof(type, member) OFFSET_OF(type,member)\r
417#define atoi(nptr) AsciiStrDecimalToUintn(nptr)\r
418#define gettimeofday(tvp, tz) do { (tvp)->tv_sec = time(NULL); (tvp)->tv_usec = 0; } while (0)\r
fc9fa685
QL
419\r
420#endif\r