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