]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c
CryptoPkg: Enable ssl build in OpensslLib directly
[mirror_edk2.git] / CryptoPkg / Library / BaseCryptLib / SysCall / CrtWrapper.c
CommitLineData
97f98500
HT
1/** @file\r
2 C Run-Time Libraries (CRT) Wrapper Implementation for OpenSSL-based\r
3 Cryptographic Library.\r
4\r
03805fc3 5Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
97f98500
HT
6This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include <OpenSslSupport.h>\r
17\r
8e01b449 18int errno = 0;\r
19\r
c61fb9c8 20FILE *stderr = NULL;\r
b7d320f8 21FILE *stdin = NULL;\r
c61fb9c8 22FILE *stdout = NULL;\r
23\r
97f98500 24typedef\r
03805fc3 25int\r
97f98500
HT
26(*SORT_COMPARE)(\r
27 IN VOID *Buffer1,\r
28 IN VOID *Buffer2\r
29 );\r
30\r
31//\r
32// Duplicated from EDKII BaseSortLib for qsort() wrapper\r
33//\r
34STATIC\r
35VOID\r
36QuickSortWorker (\r
37 IN OUT VOID *BufferToSort,\r
38 IN CONST UINTN Count,\r
39 IN CONST UINTN ElementSize,\r
40 IN SORT_COMPARE CompareFunction,\r
41 IN VOID *Buffer\r
42 )\r
43{\r
44 VOID *Pivot;\r
45 UINTN LoopCount;\r
46 UINTN NextSwapLocation;\r
47\r
48 ASSERT(BufferToSort != NULL);\r
49 ASSERT(CompareFunction != NULL);\r
50 ASSERT(Buffer != NULL);\r
51\r
52 if (Count < 2 || ElementSize < 1) {\r
53 return;\r
54 }\r
55\r
56 NextSwapLocation = 0;\r
57\r
58 //\r
59 // Pick a pivot (we choose last element)\r
60 //\r
61 Pivot = ((UINT8 *)BufferToSort + ((Count - 1) * ElementSize));\r
62\r
63 //\r
64 // Now get the pivot such that all on "left" are below it\r
65 // and everything "right" are above it\r
66 //\r
67 for (LoopCount = 0; LoopCount < Count - 1; LoopCount++)\r
68 {\r
69 //\r
70 // If the element is less than the pivot\r
71 //\r
72 if (CompareFunction ((VOID *)((UINT8 *)BufferToSort + ((LoopCount) * ElementSize)), Pivot) <= 0) {\r
73 //\r
74 // Swap\r
75 //\r
76 CopyMem (Buffer, (UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), ElementSize);\r
77 CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), (UINT8 *)BufferToSort + ((LoopCount) * ElementSize), ElementSize);\r
78 CopyMem ((UINT8 *)BufferToSort + ((LoopCount) * ElementSize), Buffer, ElementSize);\r
79\r
80 //\r
81 // Increment NextSwapLocation\r
82 //\r
83 NextSwapLocation++;\r
84 }\r
85 }\r
86 //\r
87 // Swap pivot to it's final position (NextSwapLocaiton)\r
88 //\r
89 CopyMem (Buffer, Pivot, ElementSize);\r
90 CopyMem (Pivot, (UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), ElementSize);\r
91 CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), Buffer, ElementSize);\r
92\r
93 //\r
94 // Now recurse on 2 paritial lists. Neither of these will have the 'pivot' element.\r
95 // IE list is sorted left half, pivot element, sorted right half...\r
96 //\r
97 QuickSortWorker (\r
98 BufferToSort,\r
99 NextSwapLocation,\r
100 ElementSize,\r
101 CompareFunction,\r
102 Buffer\r
103 );\r
104\r
105 QuickSortWorker (\r
106 (UINT8 *)BufferToSort + (NextSwapLocation + 1) * ElementSize,\r
107 Count - NextSwapLocation - 1,\r
108 ElementSize,\r
109 CompareFunction,\r
110 Buffer\r
111 );\r
112\r
113 return;\r
114}\r
115\r
116//---------------------------------------------------------\r
117// Standard C Run-time Library Interface Wrapper\r
118//---------------------------------------------------------\r
119\r
120//\r
121// -- String Manipulation Routines --\r
122//\r
123\r
124/* Scan a string for the last occurrence of a character */\r
125char *strrchr (const char *str, int c)\r
126{\r
127 char * save;\r
128\r
129 for (save = NULL; ; ++str) {\r
130 if (*str == c) {\r
131 save = (char *)str;\r
132 }\r
133 if (*str == 0) {\r
134 return (save);\r
135 }\r
136 }\r
137}\r
138\r
139/* Read formatted data from a string */\r
140int sscanf (const char *buffer, const char *format, ...)\r
141{\r
142 //\r
143 // Null sscanf() function implementation to satisfy the linker, since\r
144 // no direct functionality logic dependency in present UEFI cases.\r
145 //\r
146 return 0;\r
147}\r
148\r
149//\r
150// -- Character Classification Routines --\r
151//\r
152\r
153/* Determines if a particular character is a decimal-digit character */\r
154int isdigit (int c)\r
155{\r
156 //\r
157 // <digit> ::= [0-9]\r
158 //\r
159 return (('0' <= (c)) && ((c) <= '9'));\r
160}\r
161\r
162/* Determine if an integer represents character that is a hex digit */\r
163int isxdigit (int c)\r
164{\r
165 //\r
166 // <hexdigit> ::= [0-9] | [a-f] | [A-F]\r
167 //\r
168 return ((('0' <= (c)) && ((c) <= '9')) ||\r
169 (('a' <= (c)) && ((c) <= 'f')) ||\r
170 (('A' <= (c)) && ((c) <= 'F')));\r
171}\r
172\r
173/* Determines if a particular character represents a space character */\r
174int isspace (int c)\r
175{\r
176 //\r
177 // <space> ::= [ ]\r
178 //\r
179 return ((c) == ' ');\r
180}\r
181\r
182/* Determine if a particular character is an alphanumeric character */\r
183int isalnum (int c)\r
184{\r
185 //\r
186 // <alnum> ::= [0-9] | [a-z] | [A-Z]\r
187 //\r
188 return ((('0' <= (c)) && ((c) <= '9')) ||\r
189 (('a' <= (c)) && ((c) <= 'z')) ||\r
190 (('A' <= (c)) && ((c) <= 'Z')));\r
191}\r
192\r
193/* Determines if a particular character is in upper case */\r
194int isupper (int c)\r
195{\r
196 //\r
197 // <uppercase letter> := [A-Z]\r
198 //\r
199 return (('A' <= (c)) && ((c) <= 'Z'));\r
200}\r
201\r
202//\r
203// -- Data Conversion Routines --\r
204//\r
205\r
206/* Convert strings to a long-integer value */\r
207long strtol (const char *nptr, char **endptr, int base)\r
208{\r
209 //\r
210 // Null strtol() function implementation to satisfy the linker, since there is\r
211 // no direct functionality logic dependency in present UEFI cases.\r
212 //\r
213 return 0;\r
214}\r
215\r
216/* Convert strings to an unsigned long-integer value */\r
217unsigned long strtoul (const char *nptr, char **endptr, int base)\r
218{\r
219 //\r
220 // Null strtoul() function implementation to satisfy the linker, since there is\r
221 // no direct functionality logic dependency in present UEFI cases.\r
222 //\r
223 return 0;\r
224}\r
225\r
226/* Convert character to lowercase */\r
227int tolower (int c)\r
228{\r
229 if (('A' <= (c)) && ((c) <= 'Z')) {\r
230 return (c - ('A' - 'a'));\r
231 }\r
232 return (c);\r
233}\r
234\r
235//\r
236// -- Searching and Sorting Routines --\r
237//\r
238\r
239/* Performs a quick sort */\r
240void qsort (void *base, size_t num, size_t width, int (*compare)(const void *, const void *))\r
241{\r
242 VOID *Buffer;\r
243\r
244 ASSERT (base != NULL);\r
245 ASSERT (compare != NULL);\r
246\r
b7d320f8 247 //\r
248 // Use CRT-style malloc to cover BS and RT memory allocation.\r
249 //\r
250 Buffer = malloc (width);\r
97f98500
HT
251 ASSERT (Buffer != NULL);\r
252\r
253 //\r
254 // Re-use PerformQuickSort() function Implementation in EDKII BaseSortLib.\r
255 //\r
256 QuickSortWorker (base, (UINTN)num, (UINTN)width, (SORT_COMPARE)compare, Buffer);\r
257\r
b7d320f8 258 free (Buffer);\r
97f98500
HT
259 return;\r
260}\r
261\r
262//\r
263// -- Process and Environment Control Routines --\r
264//\r
265\r
266/* Get a value from the current environment */\r
267char *getenv (const char *varname)\r
268{\r
269 //\r
270 // Null getenv() function implementation to satisfy the linker, since there is\r
271 // no direct functionality logic dependency in present UEFI cases.\r
272 //\r
273 return NULL;\r
274}\r
275\r
276//\r
277// -- Stream I/O Routines --\r
278//\r
279\r
280/* Write formatted output using a pointer to a list of arguments */\r
281int vfprintf (FILE *stream, const char *format, VA_LIST arg)\r
282{\r
283 return 0;\r
284}\r
285\r
286/* Write data to a stream */\r
287size_t fwrite (const void *buffer, size_t size, size_t count, FILE *stream)\r
288{\r
289 return 0;\r
290}\r
f754e613 291\r
292//\r
293// -- Dummy OpenSSL Support Routines --\r
294//\r
295\r
296int BIO_printf (void *bio, const char *format, ...)\r
297{\r
298 return 0;\r
299}\r
300\r
301int BIO_snprintf(char *buf, size_t n, const char *format, ...)\r
302{\r
303 return 0;\r
304}\r
4a567c96 305\r
306void *UI_OpenSSL(void)\r
307{\r
308 return NULL;\r
309}\r
8e01b449 310\r
311int X509_load_cert_file (VOID *ctx, const char *file, int type)\r
312{\r
313 return 0;\r
314}\r
315\r
316int X509_load_crl_file (VOID *ctx, const char *file, int type)\r
317{\r
318 return 0;\r
319}\r
320\r
321int chmod (const char *c, mode_t m)\r
322{\r
323 return -1;\r
324}\r
325\r
326int close (int f)\r
327{\r
328 return -1;\r
329}\r
330\r
331void closelog (void)\r
332{\r
333\r
334}\r
335\r
f114914b 336#ifdef __GNUC__\r
337\r
338typedef\r
339VOID\r
340(EFIAPI *NoReturnFuncPtr)(\r
341 VOID\r
342 ) __attribute__((__noreturn__));\r
343\r
344\r
345STATIC\r
346VOID\r
347EFIAPI\r
348NopFunction (\r
349 VOID\r
350 )\r
351{\r
352}\r
353\r
354\r
8e01b449 355void exit (int e)\r
356{\r
f114914b 357 NoReturnFuncPtr NoReturnFunc;\r
358\r
359 NoReturnFunc = (NoReturnFuncPtr) NopFunction;\r
8e01b449 360\r
f114914b 361 NoReturnFunc ();\r
8e01b449 362}\r
363\r
f114914b 364#else\r
365\r
366void exit (int e)\r
367{\r
368}\r
369\r
370#endif\r
371\r
8e01b449 372int fclose (FILE *f)\r
373{\r
374 return 0;\r
375}\r
376\r
377FILE *fopen (const char *c, const char *m)\r
378{\r
379 return NULL;\r
380}\r
381\r
382size_t fread (void *b, size_t c, size_t i, FILE *f)\r
383{\r
384 return 0;\r
385}\r
386\r
32387e00
JW
387int fputs (const char *s, FILE *f)\r
388{\r
389 return 0;\r
390}\r
391\r
8e01b449 392int fprintf (FILE *f, const char *s, ...)\r
393{\r
394 return 0;\r
395}\r
396\r
397uid_t getuid (void)\r
398{\r
399 return 0;\r
400}\r
401\r
402uid_t geteuid (void)\r
403{\r
404 return 0;\r
405}\r
406\r
407gid_t getgid (void)\r
408{\r
409 return 0;\r
410}\r
411\r
412gid_t getegid (void)\r
413{\r
414 return 0;\r
415}\r
416\r
417off_t lseek (int a, off_t o, int d)\r
418{\r
419 return 0;\r
420}\r
421\r
422void openlog (const char *c, int a, int b)\r
423{\r
424\r
425}\r
426\r
427ssize_t read (int f, void *b, size_t c)\r
428{\r
429 return 0;\r
430}\r
431\r
432int stat (const char *c, struct stat *s)\r
433{\r
434 return -1;\r
435}\r
436\r
437int strcasecmp (const char *c, const char *s)\r
438{\r
439 return 0;\r
440}\r
441\r
442int strncasecmp (const char *c, const char *s, size_t l)\r
443{\r
444 return 0;\r
445}\r
446\r
447void syslog (int a, const char *c, ...)\r
448{\r
449\r
450}\r
451\r
452ssize_t write (int f, const void *b, size_t l)\r
453{\r
454 return 0;\r
455}\r
32387e00
JW
456\r
457int printf (char const *fmt, ...)\r
458{\r
459 return 0;\r
460}\r