197f98500c1d40eba76210961e90ea5d354bcbc18hhtian/** @file 297f98500c1d40eba76210961e90ea5d354bcbc18hhtian C Run-Time Libraries (CRT) Wrapper Implementation for OpenSSL-based 397f98500c1d40eba76210961e90ea5d354bcbc18hhtian Cryptographic Library. 497f98500c1d40eba76210961e90ea5d354bcbc18hhtian 5c61fb9c8a40f5999f89512bf33df57a2098928c1jljustenCopyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR> 697f98500c1d40eba76210961e90ea5d354bcbc18hhtianThis program and the accompanying materials 797f98500c1d40eba76210961e90ea5d354bcbc18hhtianare licensed and made available under the terms and conditions of the BSD License 897f98500c1d40eba76210961e90ea5d354bcbc18hhtianwhich accompanies this distribution. The full text of the license may be found at 997f98500c1d40eba76210961e90ea5d354bcbc18hhtianhttp://opensource.org/licenses/bsd-license.php 1097f98500c1d40eba76210961e90ea5d354bcbc18hhtian 1197f98500c1d40eba76210961e90ea5d354bcbc18hhtianTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 1297f98500c1d40eba76210961e90ea5d354bcbc18hhtianWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 1397f98500c1d40eba76210961e90ea5d354bcbc18hhtian 1497f98500c1d40eba76210961e90ea5d354bcbc18hhtian**/ 1597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 1697f98500c1d40eba76210961e90ea5d354bcbc18hhtian#include <OpenSslSupport.h> 1797f98500c1d40eba76210961e90ea5d354bcbc18hhtian 188e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint errno = 0; 198e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 20c61fb9c8a40f5999f89512bf33df57a2098928c1jljustenFILE *stderr = NULL; 21b7d320f8117ed2fffe001b1a0b7bfcd4f40fafc4tyeFILE *stdin = NULL; 22c61fb9c8a40f5999f89512bf33df57a2098928c1jljustenFILE *stdout = NULL; 23c61fb9c8a40f5999f89512bf33df57a2098928c1jljusten 2497f98500c1d40eba76210961e90ea5d354bcbc18hhtiantypedef 2597f98500c1d40eba76210961e90ea5d354bcbc18hhtianINTN 2697f98500c1d40eba76210961e90ea5d354bcbc18hhtian(*SORT_COMPARE)( 2797f98500c1d40eba76210961e90ea5d354bcbc18hhtian IN VOID *Buffer1, 2897f98500c1d40eba76210961e90ea5d354bcbc18hhtian IN VOID *Buffer2 2997f98500c1d40eba76210961e90ea5d354bcbc18hhtian ); 3097f98500c1d40eba76210961e90ea5d354bcbc18hhtian 3197f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 3297f98500c1d40eba76210961e90ea5d354bcbc18hhtian// Duplicated from EDKII BaseSortLib for qsort() wrapper 3397f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 3497f98500c1d40eba76210961e90ea5d354bcbc18hhtianSTATIC 3597f98500c1d40eba76210961e90ea5d354bcbc18hhtianVOID 3697f98500c1d40eba76210961e90ea5d354bcbc18hhtianQuickSortWorker ( 3797f98500c1d40eba76210961e90ea5d354bcbc18hhtian IN OUT VOID *BufferToSort, 3897f98500c1d40eba76210961e90ea5d354bcbc18hhtian IN CONST UINTN Count, 3997f98500c1d40eba76210961e90ea5d354bcbc18hhtian IN CONST UINTN ElementSize, 4097f98500c1d40eba76210961e90ea5d354bcbc18hhtian IN SORT_COMPARE CompareFunction, 4197f98500c1d40eba76210961e90ea5d354bcbc18hhtian IN VOID *Buffer 4297f98500c1d40eba76210961e90ea5d354bcbc18hhtian ) 4397f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 4497f98500c1d40eba76210961e90ea5d354bcbc18hhtian VOID *Pivot; 4597f98500c1d40eba76210961e90ea5d354bcbc18hhtian UINTN LoopCount; 4697f98500c1d40eba76210961e90ea5d354bcbc18hhtian UINTN NextSwapLocation; 4797f98500c1d40eba76210961e90ea5d354bcbc18hhtian 4897f98500c1d40eba76210961e90ea5d354bcbc18hhtian ASSERT(BufferToSort != NULL); 4997f98500c1d40eba76210961e90ea5d354bcbc18hhtian ASSERT(CompareFunction != NULL); 5097f98500c1d40eba76210961e90ea5d354bcbc18hhtian ASSERT(Buffer != NULL); 5197f98500c1d40eba76210961e90ea5d354bcbc18hhtian 5297f98500c1d40eba76210961e90ea5d354bcbc18hhtian if (Count < 2 || ElementSize < 1) { 5397f98500c1d40eba76210961e90ea5d354bcbc18hhtian return; 5497f98500c1d40eba76210961e90ea5d354bcbc18hhtian } 5597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 5697f98500c1d40eba76210961e90ea5d354bcbc18hhtian NextSwapLocation = 0; 5797f98500c1d40eba76210961e90ea5d354bcbc18hhtian 5897f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 5997f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Pick a pivot (we choose last element) 6097f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 6197f98500c1d40eba76210961e90ea5d354bcbc18hhtian Pivot = ((UINT8 *)BufferToSort + ((Count - 1) * ElementSize)); 6297f98500c1d40eba76210961e90ea5d354bcbc18hhtian 6397f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 6497f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Now get the pivot such that all on "left" are below it 6597f98500c1d40eba76210961e90ea5d354bcbc18hhtian // and everything "right" are above it 6697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 6797f98500c1d40eba76210961e90ea5d354bcbc18hhtian for (LoopCount = 0; LoopCount < Count - 1; LoopCount++) 6897f98500c1d40eba76210961e90ea5d354bcbc18hhtian { 6997f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 7097f98500c1d40eba76210961e90ea5d354bcbc18hhtian // If the element is less than the pivot 7197f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 7297f98500c1d40eba76210961e90ea5d354bcbc18hhtian if (CompareFunction ((VOID *)((UINT8 *)BufferToSort + ((LoopCount) * ElementSize)), Pivot) <= 0) { 7397f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 7497f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Swap 7597f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 7697f98500c1d40eba76210961e90ea5d354bcbc18hhtian CopyMem (Buffer, (UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), ElementSize); 7797f98500c1d40eba76210961e90ea5d354bcbc18hhtian CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), (UINT8 *)BufferToSort + ((LoopCount) * ElementSize), ElementSize); 7897f98500c1d40eba76210961e90ea5d354bcbc18hhtian CopyMem ((UINT8 *)BufferToSort + ((LoopCount) * ElementSize), Buffer, ElementSize); 7997f98500c1d40eba76210961e90ea5d354bcbc18hhtian 8097f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 8197f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Increment NextSwapLocation 8297f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 8397f98500c1d40eba76210961e90ea5d354bcbc18hhtian NextSwapLocation++; 8497f98500c1d40eba76210961e90ea5d354bcbc18hhtian } 8597f98500c1d40eba76210961e90ea5d354bcbc18hhtian } 8697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 8797f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Swap pivot to it's final position (NextSwapLocaiton) 8897f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 8997f98500c1d40eba76210961e90ea5d354bcbc18hhtian CopyMem (Buffer, Pivot, ElementSize); 9097f98500c1d40eba76210961e90ea5d354bcbc18hhtian CopyMem (Pivot, (UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), ElementSize); 9197f98500c1d40eba76210961e90ea5d354bcbc18hhtian CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), Buffer, ElementSize); 9297f98500c1d40eba76210961e90ea5d354bcbc18hhtian 9397f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 9497f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Now recurse on 2 paritial lists. Neither of these will have the 'pivot' element. 9597f98500c1d40eba76210961e90ea5d354bcbc18hhtian // IE list is sorted left half, pivot element, sorted right half... 9697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 9797f98500c1d40eba76210961e90ea5d354bcbc18hhtian QuickSortWorker ( 9897f98500c1d40eba76210961e90ea5d354bcbc18hhtian BufferToSort, 9997f98500c1d40eba76210961e90ea5d354bcbc18hhtian NextSwapLocation, 10097f98500c1d40eba76210961e90ea5d354bcbc18hhtian ElementSize, 10197f98500c1d40eba76210961e90ea5d354bcbc18hhtian CompareFunction, 10297f98500c1d40eba76210961e90ea5d354bcbc18hhtian Buffer 10397f98500c1d40eba76210961e90ea5d354bcbc18hhtian ); 10497f98500c1d40eba76210961e90ea5d354bcbc18hhtian 10597f98500c1d40eba76210961e90ea5d354bcbc18hhtian QuickSortWorker ( 10697f98500c1d40eba76210961e90ea5d354bcbc18hhtian (UINT8 *)BufferToSort + (NextSwapLocation + 1) * ElementSize, 10797f98500c1d40eba76210961e90ea5d354bcbc18hhtian Count - NextSwapLocation - 1, 10897f98500c1d40eba76210961e90ea5d354bcbc18hhtian ElementSize, 10997f98500c1d40eba76210961e90ea5d354bcbc18hhtian CompareFunction, 11097f98500c1d40eba76210961e90ea5d354bcbc18hhtian Buffer 11197f98500c1d40eba76210961e90ea5d354bcbc18hhtian ); 11297f98500c1d40eba76210961e90ea5d354bcbc18hhtian 11397f98500c1d40eba76210961e90ea5d354bcbc18hhtian return; 11497f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 11597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 11697f98500c1d40eba76210961e90ea5d354bcbc18hhtian//--------------------------------------------------------- 11797f98500c1d40eba76210961e90ea5d354bcbc18hhtian// Standard C Run-time Library Interface Wrapper 11897f98500c1d40eba76210961e90ea5d354bcbc18hhtian//--------------------------------------------------------- 11997f98500c1d40eba76210961e90ea5d354bcbc18hhtian 12097f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 12197f98500c1d40eba76210961e90ea5d354bcbc18hhtian// -- String Manipulation Routines -- 12297f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 12397f98500c1d40eba76210961e90ea5d354bcbc18hhtian 12497f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Scan a string for the last occurrence of a character */ 12597f98500c1d40eba76210961e90ea5d354bcbc18hhtianchar *strrchr (const char *str, int c) 12697f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 12797f98500c1d40eba76210961e90ea5d354bcbc18hhtian char * save; 12897f98500c1d40eba76210961e90ea5d354bcbc18hhtian 12997f98500c1d40eba76210961e90ea5d354bcbc18hhtian for (save = NULL; ; ++str) { 13097f98500c1d40eba76210961e90ea5d354bcbc18hhtian if (*str == c) { 13197f98500c1d40eba76210961e90ea5d354bcbc18hhtian save = (char *)str; 13297f98500c1d40eba76210961e90ea5d354bcbc18hhtian } 13397f98500c1d40eba76210961e90ea5d354bcbc18hhtian if (*str == 0) { 13497f98500c1d40eba76210961e90ea5d354bcbc18hhtian return (save); 13597f98500c1d40eba76210961e90ea5d354bcbc18hhtian } 13697f98500c1d40eba76210961e90ea5d354bcbc18hhtian } 13797f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 13897f98500c1d40eba76210961e90ea5d354bcbc18hhtian 13997f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Read formatted data from a string */ 14097f98500c1d40eba76210961e90ea5d354bcbc18hhtianint sscanf (const char *buffer, const char *format, ...) 14197f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 14297f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 14397f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Null sscanf() function implementation to satisfy the linker, since 14497f98500c1d40eba76210961e90ea5d354bcbc18hhtian // no direct functionality logic dependency in present UEFI cases. 14597f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 14697f98500c1d40eba76210961e90ea5d354bcbc18hhtian return 0; 14797f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 14897f98500c1d40eba76210961e90ea5d354bcbc18hhtian 14997f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 15097f98500c1d40eba76210961e90ea5d354bcbc18hhtian// -- Character Classification Routines -- 15197f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 15297f98500c1d40eba76210961e90ea5d354bcbc18hhtian 15397f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Determines if a particular character is a decimal-digit character */ 15497f98500c1d40eba76210961e90ea5d354bcbc18hhtianint isdigit (int c) 15597f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 15697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 15797f98500c1d40eba76210961e90ea5d354bcbc18hhtian // <digit> ::= [0-9] 15897f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 15997f98500c1d40eba76210961e90ea5d354bcbc18hhtian return (('0' <= (c)) && ((c) <= '9')); 16097f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 16197f98500c1d40eba76210961e90ea5d354bcbc18hhtian 16297f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Determine if an integer represents character that is a hex digit */ 16397f98500c1d40eba76210961e90ea5d354bcbc18hhtianint isxdigit (int c) 16497f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 16597f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 16697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // <hexdigit> ::= [0-9] | [a-f] | [A-F] 16797f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 16897f98500c1d40eba76210961e90ea5d354bcbc18hhtian return ((('0' <= (c)) && ((c) <= '9')) || 16997f98500c1d40eba76210961e90ea5d354bcbc18hhtian (('a' <= (c)) && ((c) <= 'f')) || 17097f98500c1d40eba76210961e90ea5d354bcbc18hhtian (('A' <= (c)) && ((c) <= 'F'))); 17197f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 17297f98500c1d40eba76210961e90ea5d354bcbc18hhtian 17397f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Determines if a particular character represents a space character */ 17497f98500c1d40eba76210961e90ea5d354bcbc18hhtianint isspace (int c) 17597f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 17697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 17797f98500c1d40eba76210961e90ea5d354bcbc18hhtian // <space> ::= [ ] 17897f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 17997f98500c1d40eba76210961e90ea5d354bcbc18hhtian return ((c) == ' '); 18097f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 18197f98500c1d40eba76210961e90ea5d354bcbc18hhtian 18297f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Determine if a particular character is an alphanumeric character */ 18397f98500c1d40eba76210961e90ea5d354bcbc18hhtianint isalnum (int c) 18497f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 18597f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 18697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // <alnum> ::= [0-9] | [a-z] | [A-Z] 18797f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 18897f98500c1d40eba76210961e90ea5d354bcbc18hhtian return ((('0' <= (c)) && ((c) <= '9')) || 18997f98500c1d40eba76210961e90ea5d354bcbc18hhtian (('a' <= (c)) && ((c) <= 'z')) || 19097f98500c1d40eba76210961e90ea5d354bcbc18hhtian (('A' <= (c)) && ((c) <= 'Z'))); 19197f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 19297f98500c1d40eba76210961e90ea5d354bcbc18hhtian 19397f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Determines if a particular character is in upper case */ 19497f98500c1d40eba76210961e90ea5d354bcbc18hhtianint isupper (int c) 19597f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 19697f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 19797f98500c1d40eba76210961e90ea5d354bcbc18hhtian // <uppercase letter> := [A-Z] 19897f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 19997f98500c1d40eba76210961e90ea5d354bcbc18hhtian return (('A' <= (c)) && ((c) <= 'Z')); 20097f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 20197f98500c1d40eba76210961e90ea5d354bcbc18hhtian 20297f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 20397f98500c1d40eba76210961e90ea5d354bcbc18hhtian// -- Data Conversion Routines -- 20497f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 20597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 20697f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Convert strings to a long-integer value */ 20797f98500c1d40eba76210961e90ea5d354bcbc18hhtianlong strtol (const char *nptr, char **endptr, int base) 20897f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 20997f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 21097f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Null strtol() function implementation to satisfy the linker, since there is 21197f98500c1d40eba76210961e90ea5d354bcbc18hhtian // no direct functionality logic dependency in present UEFI cases. 21297f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 21397f98500c1d40eba76210961e90ea5d354bcbc18hhtian return 0; 21497f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 21597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 21697f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Convert strings to an unsigned long-integer value */ 21797f98500c1d40eba76210961e90ea5d354bcbc18hhtianunsigned long strtoul (const char *nptr, char **endptr, int base) 21897f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 21997f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 22097f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Null strtoul() function implementation to satisfy the linker, since there is 22197f98500c1d40eba76210961e90ea5d354bcbc18hhtian // no direct functionality logic dependency in present UEFI cases. 22297f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 22397f98500c1d40eba76210961e90ea5d354bcbc18hhtian return 0; 22497f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 22597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 22697f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Convert character to lowercase */ 22797f98500c1d40eba76210961e90ea5d354bcbc18hhtianint tolower (int c) 22897f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 22997f98500c1d40eba76210961e90ea5d354bcbc18hhtian if (('A' <= (c)) && ((c) <= 'Z')) { 23097f98500c1d40eba76210961e90ea5d354bcbc18hhtian return (c - ('A' - 'a')); 23197f98500c1d40eba76210961e90ea5d354bcbc18hhtian } 23297f98500c1d40eba76210961e90ea5d354bcbc18hhtian return (c); 23397f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 23497f98500c1d40eba76210961e90ea5d354bcbc18hhtian 23597f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 23697f98500c1d40eba76210961e90ea5d354bcbc18hhtian// -- Searching and Sorting Routines -- 23797f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 23897f98500c1d40eba76210961e90ea5d354bcbc18hhtian 23997f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Performs a quick sort */ 24097f98500c1d40eba76210961e90ea5d354bcbc18hhtianvoid qsort (void *base, size_t num, size_t width, int (*compare)(const void *, const void *)) 24197f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 24297f98500c1d40eba76210961e90ea5d354bcbc18hhtian VOID *Buffer; 24397f98500c1d40eba76210961e90ea5d354bcbc18hhtian 24497f98500c1d40eba76210961e90ea5d354bcbc18hhtian ASSERT (base != NULL); 24597f98500c1d40eba76210961e90ea5d354bcbc18hhtian ASSERT (compare != NULL); 24697f98500c1d40eba76210961e90ea5d354bcbc18hhtian 247b7d320f8117ed2fffe001b1a0b7bfcd4f40fafc4tye // 248b7d320f8117ed2fffe001b1a0b7bfcd4f40fafc4tye // Use CRT-style malloc to cover BS and RT memory allocation. 249b7d320f8117ed2fffe001b1a0b7bfcd4f40fafc4tye // 250b7d320f8117ed2fffe001b1a0b7bfcd4f40fafc4tye Buffer = malloc (width); 25197f98500c1d40eba76210961e90ea5d354bcbc18hhtian ASSERT (Buffer != NULL); 25297f98500c1d40eba76210961e90ea5d354bcbc18hhtian 25397f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 25497f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Re-use PerformQuickSort() function Implementation in EDKII BaseSortLib. 25597f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 25697f98500c1d40eba76210961e90ea5d354bcbc18hhtian QuickSortWorker (base, (UINTN)num, (UINTN)width, (SORT_COMPARE)compare, Buffer); 25797f98500c1d40eba76210961e90ea5d354bcbc18hhtian 258b7d320f8117ed2fffe001b1a0b7bfcd4f40fafc4tye free (Buffer); 25997f98500c1d40eba76210961e90ea5d354bcbc18hhtian return; 26097f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 26197f98500c1d40eba76210961e90ea5d354bcbc18hhtian 26297f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 26397f98500c1d40eba76210961e90ea5d354bcbc18hhtian// -- Process and Environment Control Routines -- 26497f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 26597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 26697f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Get a value from the current environment */ 26797f98500c1d40eba76210961e90ea5d354bcbc18hhtianchar *getenv (const char *varname) 26897f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 26997f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 27097f98500c1d40eba76210961e90ea5d354bcbc18hhtian // Null getenv() function implementation to satisfy the linker, since there is 27197f98500c1d40eba76210961e90ea5d354bcbc18hhtian // no direct functionality logic dependency in present UEFI cases. 27297f98500c1d40eba76210961e90ea5d354bcbc18hhtian // 27397f98500c1d40eba76210961e90ea5d354bcbc18hhtian return NULL; 27497f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 27597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 27697f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 27797f98500c1d40eba76210961e90ea5d354bcbc18hhtian// -- Stream I/O Routines -- 27897f98500c1d40eba76210961e90ea5d354bcbc18hhtian// 27997f98500c1d40eba76210961e90ea5d354bcbc18hhtian 28097f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Write formatted output using a pointer to a list of arguments */ 28197f98500c1d40eba76210961e90ea5d354bcbc18hhtianint vfprintf (FILE *stream, const char *format, VA_LIST arg) 28297f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 28397f98500c1d40eba76210961e90ea5d354bcbc18hhtian return 0; 28497f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 28597f98500c1d40eba76210961e90ea5d354bcbc18hhtian 28697f98500c1d40eba76210961e90ea5d354bcbc18hhtian/* Write data to a stream */ 28797f98500c1d40eba76210961e90ea5d354bcbc18hhtiansize_t fwrite (const void *buffer, size_t size, size_t count, FILE *stream) 28897f98500c1d40eba76210961e90ea5d354bcbc18hhtian{ 28997f98500c1d40eba76210961e90ea5d354bcbc18hhtian return 0; 29097f98500c1d40eba76210961e90ea5d354bcbc18hhtian} 291f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff 292f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff// 293f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff// -- Dummy OpenSSL Support Routines -- 294f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff// 295f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff 296f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeffint BIO_printf (void *bio, const char *format, ...) 297f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff{ 298f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff return 0; 299f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff} 300f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff 301f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeffint BIO_snprintf(char *buf, size_t n, const char *format, ...) 302f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff{ 303f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff return 0; 304f754e613fcaff79255104d82f8a5a01dc4c50d49vanjeff} 3054a567c9690db97ecbf982e9428727f073bada504qlong 3064a567c9690db97ecbf982e9428727f073bada504qlongvoid *UI_OpenSSL(void) 3074a567c9690db97ecbf982e9428727f073bada504qlong{ 3084a567c9690db97ecbf982e9428727f073bada504qlong return NULL; 3094a567c9690db97ecbf982e9428727f073bada504qlong} 3108e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3118e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint X509_load_cert_file (VOID *ctx, const char *file, int type) 3128e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3138e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 3148e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3158e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3168e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint X509_load_crl_file (VOID *ctx, const char *file, int type) 3178e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3188e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 3198e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3208e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3218e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint chmod (const char *c, mode_t m) 3228e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3238e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return -1; 3248e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3258e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3268e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint close (int f) 3278e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3288e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return -1; 3298e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3308e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3318e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongvoid closelog (void) 3328e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3338e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3348e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3358e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 336f114914b39c03f6af3173ba3aae09395ed65faaajljusten#ifdef __GNUC__ 337f114914b39c03f6af3173ba3aae09395ed65faaajljusten 338f114914b39c03f6af3173ba3aae09395ed65faaajljustentypedef 339f114914b39c03f6af3173ba3aae09395ed65faaajljustenVOID 340f114914b39c03f6af3173ba3aae09395ed65faaajljusten(EFIAPI *NoReturnFuncPtr)( 341f114914b39c03f6af3173ba3aae09395ed65faaajljusten VOID 342f114914b39c03f6af3173ba3aae09395ed65faaajljusten ) __attribute__((__noreturn__)); 343f114914b39c03f6af3173ba3aae09395ed65faaajljusten 344f114914b39c03f6af3173ba3aae09395ed65faaajljusten 345f114914b39c03f6af3173ba3aae09395ed65faaajljustenSTATIC 346f114914b39c03f6af3173ba3aae09395ed65faaajljustenVOID 347f114914b39c03f6af3173ba3aae09395ed65faaajljustenEFIAPI 348f114914b39c03f6af3173ba3aae09395ed65faaajljustenNopFunction ( 349f114914b39c03f6af3173ba3aae09395ed65faaajljusten VOID 350f114914b39c03f6af3173ba3aae09395ed65faaajljusten ) 351f114914b39c03f6af3173ba3aae09395ed65faaajljusten{ 352f114914b39c03f6af3173ba3aae09395ed65faaajljusten} 353f114914b39c03f6af3173ba3aae09395ed65faaajljusten 354f114914b39c03f6af3173ba3aae09395ed65faaajljusten 3558e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongvoid exit (int e) 3568e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 357f114914b39c03f6af3173ba3aae09395ed65faaajljusten NoReturnFuncPtr NoReturnFunc; 358f114914b39c03f6af3173ba3aae09395ed65faaajljusten 359f114914b39c03f6af3173ba3aae09395ed65faaajljusten NoReturnFunc = (NoReturnFuncPtr) NopFunction; 3608e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 361f114914b39c03f6af3173ba3aae09395ed65faaajljusten NoReturnFunc (); 3628e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3638e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 364f114914b39c03f6af3173ba3aae09395ed65faaajljusten#else 365f114914b39c03f6af3173ba3aae09395ed65faaajljusten 366f114914b39c03f6af3173ba3aae09395ed65faaajljustenvoid exit (int e) 367f114914b39c03f6af3173ba3aae09395ed65faaajljusten{ 368f114914b39c03f6af3173ba3aae09395ed65faaajljusten} 369f114914b39c03f6af3173ba3aae09395ed65faaajljusten 370f114914b39c03f6af3173ba3aae09395ed65faaajljusten#endif 371f114914b39c03f6af3173ba3aae09395ed65faaajljusten 3728e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint fclose (FILE *f) 3738e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3748e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 3758e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3768e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3778e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongFILE *fopen (const char *c, const char *m) 3788e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3798e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return NULL; 3808e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3818e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3828e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongsize_t fread (void *b, size_t c, size_t i, FILE *f) 3838e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3848e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 3858e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3868e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3878e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint fprintf (FILE *f, const char *s, ...) 3888e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3898e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 3908e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3918e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3928e01b449de91cfcd1bdf473ae1bc766c22eb616eqlonguid_t getuid (void) 3938e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3948e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 3958e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 3968e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 3978e01b449de91cfcd1bdf473ae1bc766c22eb616eqlonguid_t geteuid (void) 3988e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 3998e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4008e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4018e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4028e01b449de91cfcd1bdf473ae1bc766c22eb616eqlonggid_t getgid (void) 4038e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4048e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4058e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4068e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4078e01b449de91cfcd1bdf473ae1bc766c22eb616eqlonggid_t getegid (void) 4088e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4098e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4108e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4118e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4128e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongoff_t lseek (int a, off_t o, int d) 4138e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4148e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4158e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4168e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4178e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongvoid openlog (const char *c, int a, int b) 4188e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4198e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4208e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4218e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4228e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongssize_t read (int f, void *b, size_t c) 4238e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4248e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4258e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4268e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4278e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint stat (const char *c, struct stat *s) 4288e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4298e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return -1; 4308e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4318e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4328e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint strcasecmp (const char *c, const char *s) 4338e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4348e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4358e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4368e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4378e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongint strncasecmp (const char *c, const char *s, size_t l) 4388e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4398e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4408e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4418e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4428e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongvoid syslog (int a, const char *c, ...) 4438e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4448e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4458e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 4468e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong 4478e01b449de91cfcd1bdf473ae1bc766c22eb616eqlongssize_t write (int f, const void *b, size_t l) 4488e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong{ 4498e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong return 0; 4508e01b449de91cfcd1bdf473ae1bc766c22eb616eqlong} 451