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