Home | History | Annotate | Download | only in Include
      1 /** @file
      2   The header <stdlib.h> declares five types and several functions of general
      3   utility, and defines several macros.
      4 
      5   The files stddef.h and stdlib.h are "catch all" headers for definitions and declarations
      6   that don't fit well in the other headers.  There are two separate header files because
      7   the contents of <stddef.h> are valid in both freestanding and hosted environment, while the
      8   header <stdlib.h> contains elements that are only valid in a hosted environment.
      9 
     10   The following macros are defined in this file:<BR>
     11   @verbatim
     12     EXIT_FAILURE    An expression indicating application failure, used as an argument to exit().
     13     EXIT_SUCCESS    An expression indicating application success, used as an argument to exit().
     14     RAND_MAX        The maximum value returned by the rand function.
     15     MB_CUR_MAX      Maximum number of bytes in a multibyte character for the current locale.
     16     ATEXIT_MAX      Maximum number of routines that may be registered by the atexit function.
     17   @endverbatim
     18 
     19   The following types are defined in this file:<BR>
     20   @verbatim
     21     size_t      Unsigned integer type of the result of the sizeof operator.
     22     wchar_t     The type of a wide character.
     23     div_t       Type of the value returned by the div function.
     24     ldiv_t      Type of the value returned by the ldiv function.
     25     lldiv_t     Type of the value returned by the lldiv function.
     26   @endverbatim
     27 
     28   The following functions are declared in this file:<BR>
     29   @verbatim
     30     ################  Communication with the environment
     31     void        abort   (void) __noreturn;
     32     int         atexit  (void (*)(void));
     33     void        exit    (int status) __noreturn;
     34     void        _Exit   (int status) __noreturn;
     35     char       *getenv  (const char *name);
     36     int         setenv  (register const char * name,
     37                          register const char * value, int rewrite);
     38     int         system  (const char *string);
     39 
     40     ################  Integer arithmetic functions
     41     int         abs     (int j);
     42     long        labs    (long j);
     43     long long   llabs   (long long j);
     44     div_t       div     (int numer, int denom);
     45     ldiv_t      ldiv    (long numer, long denom);
     46     lldiv_t     lldiv   (long long numer, long long denom);
     47 
     48     ################  Pseudo-random sequence generation functions
     49     int         rand    (void);
     50     void        srand   (unsigned seed);
     51 
     52     ################  Memory management functions
     53     void       *calloc  (size_t Num, size_t Size);
     54     void        free    (void *);
     55     void       *malloc  (size_t);
     56     void       *realloc (void *Ptr, size_t NewSize);
     57 
     58     ################  Searching and Sorting utilities
     59     void       *bsearch (const void *key,  const void *base0,
     60                          size_t nmemb,     size_t size,
     61                          int (*compar)(const void *, const void *));
     62     void        qsort   (void *base, size_t nmemb, size_t size,
     63                          int (*compar)(const void *, const void *));
     64 
     65     ################  Multibyte/wide character conversion functions
     66     int         mblen   (const char *, size_t);
     67     int         mbtowc  (wchar_t * __restrict, const char * __restrict, size_t);
     68     int         wctomb  (char *, wchar_t);
     69 
     70     ################  Multibyte/wide string conversion functions
     71     size_t      mbstowcs  (wchar_t * __restrict dest,
     72                            const char * __restrict src, size_t limit);
     73     size_t      wcstombs  (char * __restrict dest,
     74                            const wchar_t * __restrict src, size_t limit);
     75 
     76     ################  Miscelaneous functions for *nix compatibility
     77     char       *realpath    (char *file_name, char *resolved_name);
     78     const char *getprogname (void);
     79     void        setprogname (const char *progname);
     80 
     81     ############  Integer Numeric conversion functions
     82     int                   atoi      (const char *nptr);
     83     long                  atol      (const char *nptr);
     84     long long             atoll     (const char *nptr);
     85     long                  strtol    (const char * __restrict nptr,
     86                                      char ** __restrict endptr, int base);
     87     unsigned long         strtoul   (const char * __restrict nptr,
     88                                      char ** __restrict endptr, int base);
     89     long long             strtoll   (const char * __restrict nptr,
     90                                      char ** __restrict endptr, int base);
     91     unsigned long long    strtoull  (const char * __restrict nptr,
     92                                      char ** __restrict endptr, int base);
     93 
     94     #########  Floating-point Numeric conversion functions
     95     double                atof      (const char *);
     96     double                strtod    (const char * __restrict nptr,
     97                                      char ** __restrict endptr);
     98     float                 strtof    (const char * __restrict nptr,
     99                                      char ** __restrict endptr);
    100     long double           strtold   (const char * __restrict nptr,
    101                                      char ** __restrict endptr);
    102   @endverbatim
    103 
    104   Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
    105   This program and the accompanying materials are licensed and made available under
    106   the terms and conditions of the BSD License that accompanies this distribution.
    107   The full text of the license may be found at
    108   http://opensource.org/licenses/bsd-license.
    109 
    110   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
    111   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
    112 **/
    113 #ifndef _STDLIB_H
    114 #define _STDLIB_H
    115 #include  <sys/EfiCdefs.h>
    116 
    117 #ifdef _EFI_SIZE_T_
    118   /** Unsigned integer type of the result of the sizeof operator. **/
    119   typedef _EFI_SIZE_T_  size_t;
    120   #undef _EFI_SIZE_T_
    121   #undef _BSD_SIZE_T_
    122 #endif
    123 
    124 #ifndef __cplusplus
    125   #ifdef _EFI_WCHAR_T
    126     /** Type of a wide (Unicode) character. **/
    127     typedef _EFI_WCHAR_T wchar_t;
    128     #undef  _EFI_WCHAR_T
    129     #undef _BSD_WCHAR_T_
    130   #endif
    131 #endif
    132 
    133 /// A structure type that is the type of the value returned by the div function.
    134 typedef struct {
    135   int quot;   /**< quotient */
    136   int rem;    /**< remainder */
    137 } div_t;
    138 
    139 /// A structure type that is the type of the value returned by the ldiv function.
    140 typedef struct {
    141   long  quot;
    142   long  rem;
    143 } ldiv_t;
    144 
    145 /// A structure type that is the type of the value returned by the lldiv function.
    146 typedef struct {
    147   long long quot;
    148   long long rem;
    149 } lldiv_t;
    150 
    151 /** @{
    152     Expand to integer constant expressions that can be used as the argument to
    153     the exit function to return unsuccessful or successful termination status,
    154     respectively, to the host environment.
    155 **/
    156 #define EXIT_FAILURE  1
    157 #define EXIT_SUCCESS  0
    158 /*@}*/
    159 
    160 /** Expands to an integer constant expression that is the maximum value
    161     returned by the rand function.
    162 **/
    163 #define RAND_MAX  0x7fffffff
    164 
    165 /** Expands to a positive integer expression with type size_t that is the
    166     maximum number of bytes in a multibyte character for the extended character
    167     set specified by the current locale (category LC_CTYPE), which is never
    168     greater than MB_LEN_MAX.
    169 
    170     Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
    171     correctly formed characters will only produce 1, 2, or 3-byte UTF-8 characters.
    172 **/
    173 #define MB_CUR_MAX  3
    174 
    175 /** Maximum number of functions that can be registered by atexit.
    176 
    177     The C standard states that the implementation shall support the
    178     registration of at least 32 functions.
    179 **/
    180 #define ATEXIT_MAX  32
    181 
    182 __BEGIN_DECLS
    183 
    184 /* ################  Communication with the environment  ################## */
    185 
    186 /** The abort function causes abnormal program termination to occur, unless
    187     the signal SIGABRT is being caught and the signal handler does not return.
    188 
    189     Open streams with unwritten buffered data are not flushed, open
    190     streams are not closed, and temporary files are not removed by abort.
    191 
    192     Unsuccessful termination is returned to the host environment by means of
    193     the function call, raise(SIGABRT).
    194 
    195     @sa signal.h
    196 **/
    197 void    abort(void) __noreturn;
    198 
    199 /** The atexit function registers the function pointed to by func, to be
    200     called without arguments at normal program termination.
    201 
    202     The implementation supports the registration of up to 32 functions.
    203 
    204     @param[in]  Handler   Pointer to the function to register as one of the
    205                           routines to call at application exit time.
    206 
    207     @return   The atexit function returns zero if the registration succeeds,
    208               nonzero if it fails.
    209 **/
    210 int     atexit(void (*Handler)(void));
    211 
    212 /** The exit function causes normal program termination to occur. If more than
    213     one call to the exit function is executed by a program,
    214     the behavior is undefined.
    215 
    216     First, all functions registered by the atexit function are called, in the
    217     reverse order of their registration, except that a function is called
    218     after any previously registered functions that had already been called at
    219     the time it was registered. If, during the call to any such function, a
    220     call to the longjmp function is made that would terminate the call to the
    221     registered function, the behavior is undefined.
    222 
    223     Next, all open streams with unwritten buffered data are flushed, all open
    224     streams are closed, and all files created by the tmpfile function
    225     are removed.
    226 
    227     Finally, control is returned to the host environment.
    228 
    229     @param[in]  status    A value to be returned when the application exits.
    230 
    231     @return   If the value of status is zero, or EXIT_SUCCESS, status is
    232               returned unchanged. If the value of status is EXIT_FAILURE,
    233               RETURN_ABORTED is returned.  Otherwise, status is returned unchanged.
    234 **/
    235 void    exit(int status) __noreturn;
    236 
    237 /** The _Exit function causes normal program termination to occur and control
    238     to be returned to the host environment.
    239 
    240     No functions registered by the atexit function or signal handlers
    241     registered by the signal function are called.  Open streams with unwritten
    242     buffered data are not flushed, open streams are not closed, and temporary
    243     files are not removed by abort.
    244 
    245     The status returned to the host environment is determined in the same way
    246     as for the exit function.
    247 
    248     @param[in]  status    A value to be returned when the application exits.
    249 
    250     @return   If the value of status is zero, or EXIT_SUCCESS, status is
    251               returned unchanged. If the value of status is EXIT_FAILURE,
    252               RETURN_ABORTED is returned.  Otherwise, status is returned unchanged.
    253 **/
    254 void    _Exit(int status) __noreturn;
    255 
    256 /** The getenv function searches an environment list, provided by the host
    257     environment, for a string that matches the string pointed to by name.  The
    258     set of environment names and the method for altering the environment list
    259     are determined by the underlying UEFI Shell implementation.
    260 
    261     @param[in]  name    Pointer to a string naming the environment variable to retrieve.
    262 
    263     @return   The getenv function returns a pointer to a string associated with
    264               the matched list member.  The string pointed to shall not be
    265               modified by the program, but may be overwritten by a subsequent
    266               call to the getenv function.  If the specified name cannot be
    267               found, a null pointer is returned.
    268 **/
    269 char   *getenv(const char *name);
    270 
    271 /** Add or update a variable in the environment list.
    272 
    273     @param[in]  name     Address of a zero terminated name string.
    274     @param[in]  value    Address of a zero terminated value string.
    275     @param[in]  rewrite  TRUE allows overwriting existing values.
    276 
    277     @retval  0  Returns 0 upon success.
    278     @retval -1  Returns -1 upon failure, sets errno with more information.
    279 **/
    280 int
    281 setenv (
    282   register const char * name,
    283   register const char * value,
    284   int rewrite
    285   );
    286 
    287 /** If string is a null pointer, the system function determines whether the
    288     host environment has a command processor. If string is not a null pointer,
    289     the system function passes the string pointed to by string to that command
    290     processor to be executed in a manner which the implementation shall
    291     document; this might then cause the program calling system to behave in a
    292     non-conforming manner or to terminate.
    293 
    294     @param[in]  string    Pointer to the command string to be executed.
    295 
    296     @return   If the argument is a null pointer, the system function returns
    297               nonzero only if a command processor is available. If the argument
    298               is not a null pointer, and the system function does return, it
    299               returns an implementation-defined value.
    300 **/
    301 int     system(const char *string);
    302 
    303 
    304 /* ################  Integer arithmetic functions  ######################## */
    305 
    306 /** Computes the absolute value of an integer j.
    307 
    308     @param[in]  j   The value to find the absolute value of.
    309 
    310     @return   The absolute value of j.
    311 **/
    312 int     abs(int j);
    313 
    314 /** Computes the absolute value of a long integer j.
    315 
    316     @param[in]  j   The value to find the absolute value of.
    317 
    318     @return   The absolute value of j.
    319 **/
    320 long    labs(long j);
    321 
    322 /** Computes the absolute value of a long long integer j.
    323 
    324     @param[in]  j   The value to find the absolute value of.
    325 
    326     @return   The absolute value of j.
    327 **/
    328 long long
    329         llabs(long long j);
    330 
    331 /** Computes numer / denom and numer % denom in a single operation.
    332 
    333     @param[in]  numer   The numerator for the division.
    334     @param[in]  denom   The denominator for the division.
    335 
    336     @return   Returns a structure of type div_t, comprising both the
    337               quotient and the remainder.
    338 **/
    339 div_t   div(int numer, int denom);
    340 
    341 /** Computes numer / denom and numer % denom in a single operation.
    342 
    343     @param[in]  numer   The numerator for the division.
    344     @param[in]  denom   The denominator for the division.
    345 
    346     @return   Returns a structure of type ldiv_t, comprising both the
    347               quotient and the remainder.
    348 **/
    349 ldiv_t  ldiv(long numer, long denom);
    350 
    351 /** Computes numer / denom and numer % denom in a single operation.
    352 
    353     @param[in]  numer   The numerator for the division.
    354     @param[in]  denom   The denominator for the division.
    355 
    356     @return   Returns a structure of type lldiv_t, comprising both the
    357               quotient and the remainder.
    358 **/
    359 lldiv_t lldiv(long long numer, long long denom);
    360 
    361 /* ############  Integer Numeric conversion functions  #################### */
    362 
    363 /** The atoi function converts the initial portion of the string pointed to by
    364     nptr to int representation.  Except for the behavior on error, it is
    365     equivalent to:
    366       - atoi: (int)strtol(nptr, (char **)NULL, 10)
    367 
    368     @param[in]  nptr  Pointer to the string to be converted.
    369 
    370     @return   The atoi function returns the converted value.
    371 **/
    372 int     atoi(const char *nptr);
    373 
    374 /** The atol function converts the initial portion of the string pointed to by
    375     nptr to long int representation.  Except for the behavior on error, it is
    376     equivalent to:
    377       - atol: strtol(nptr, (char **)NULL, 10)
    378 
    379     @param[in]  nptr  Pointer to the string to be converted.
    380 
    381     @return   The atol function returns the converted value.
    382 **/
    383 long    atol(const char *nptr);
    384 
    385 /** The atoll function converts the initial portion of the string pointed to by
    386     nptr to long long int representation.  Except for the behavior on error, it
    387     is equivalent to:
    388       - atoll: strtoll(nptr, (char **)NULL, 10)
    389 
    390     @param[in]  nptr  Pointer to the string to be converted.
    391 
    392     @return   The atoll function returns the converted value.
    393 **/
    394 long long
    395         atoll(const char *nptr);
    396 
    397 /** The strtol, strtoll, strtoul, and strtoull functions convert the initial
    398     portion of the string pointed to by nptr to long int, long long int,
    399     unsigned long int, and unsigned long long int representation, respectively.
    400     First, they decompose the input string into three parts: an initial,
    401     possibly empty, sequence of white-space characters (as specified by the
    402     isspace function), a subject sequence resembling an integer represented in
    403     some radix determined by the value of base, and a final string of one or
    404     more unrecognized characters, including the terminating null character of
    405     the input string. Then, they attempt to convert the subject sequence to an
    406     integer, and return the result.
    407 
    408     If the value of base is zero, the expected form of the subject sequence is
    409     that of an integer constant, optionally preceded
    410     by a plus or minus sign, but not including an integer suffix. If the value
    411     of base is between 2 and 36 (inclusive), the expected form of the subject
    412     sequence is a sequence of letters and digits representing an integer with
    413     the radix specified by base, optionally preceded by a plus or minus sign,
    414     but not including an integer suffix. The letters from a (or A) through z
    415     (or Z) are ascribed the values 10 through 35; only letters and digits whose
    416     ascribed values are less than that of base are permitted. If the value of
    417     base is 16, the characters 0x or 0X may optionally precede the sequence of
    418     letters and digits, following the sign if present.
    419 
    420     The subject sequence is defined as the longest initial subsequence of the
    421     input string, starting with the first non-white-space character, that is of
    422     the expected form. The subject sequence contains no characters if the input
    423     string is empty or consists entirely of white space, or if the first
    424     non-white-space character is other than a sign or a permissible letter or digit.
    425 
    426     If the subject sequence has the expected form and the value of base is
    427     zero, the sequence of characters starting with the first digit is
    428     interpreted as an integer constant. If the subject sequence has the
    429     expected form and the value of base is between 2 and 36, it is used as the
    430     base for conversion, ascribing to each letter its value as given above. If
    431     the subject sequence begins with a minus sign, the value resulting from the
    432     conversion is negated (in the return type). A pointer to the final string
    433     is stored in the object pointed to by endptr, provided that endptr is
    434     not a null pointer.
    435 
    436     In other than the "C" locale, additional locale-specific subject sequence
    437     forms may be accepted.
    438 
    439     If the subject sequence is empty or does not have the expected form, no
    440     conversion is performed; the value of nptr is stored in the object pointed
    441     to by endptr, provided that endptr is not a null pointer.
    442 
    443     @param[in]    nptr    Pointer to the string to be converted.
    444     @param[out]   endptr  If not NULL, points to an object to receive a pointer to the final string.
    445     @param[in]    base    The base, 0 to 36, of the number represented by the input string.
    446 
    447     @return   The strtol, strtoll, strtoul, and strtoull functions return the
    448               converted value, if any. If no conversion could be performed, zero
    449               is returned. If the correct value is outside the range of
    450               representable values, LONG_MIN, LONG_MAX, LLONG_MIN, LLONG_MAX,
    451               ULONG_MAX, or ULLONG_MAX is returned (according to the return type
    452               and sign of the value, if any), and the value of the macro ERANGE
    453               is stored in errno.
    454 **/
    455 long    strtol(const char * __restrict nptr, char ** __restrict endptr, int base);
    456 
    457 /** The strtoul function converts the initial portion of the string pointed to
    458     by nptr to unsigned long int representation.
    459 
    460     See the description for strtol for more information.
    461 
    462     @param[in]    nptr    Pointer to the string to be converted.
    463     @param[out]   endptr  If not NULL, points to an object to receive a pointer to the final string.
    464     @param[in]    base    The base, 0 to 36, of the number represented by the input string.
    465 
    466     @return   The strtoul function returns the converted value, if any. If no
    467               conversion could be performed, zero is returned. If the correct
    468               value is outside the range of representable values, ULONG_MAX is
    469               returned and the value of the macro ERANGE is stored in errno.
    470 **/
    471 unsigned long
    472         strtoul(const char * __restrict nptr, char ** __restrict endptr, int base);
    473 
    474 /** The strtoll function converts the initial portion of the string pointed to
    475     by nptr to long long int representation.
    476 
    477     See the description for strtol for more information.
    478 
    479     @param[in]    nptr    Pointer to the string to be converted.
    480     @param[out]   endptr  If not NULL, points to an object to receive a pointer to the final string.
    481     @param[in]    base    The base, 0 to 36, of the number represented by the input string.
    482 
    483     @return   The strtoll function returns the converted value, if any. If no
    484               conversion could be performed, zero is returned. If the correct
    485               value is outside the range of representable values, LLONG_MIN or
    486               LLONG_MAX is returned (according to the sign of the value, if any),
    487               and the value of the macro ERANGE is stored in errno.
    488 **/
    489 long long
    490         strtoll(const char * __restrict nptr, char ** __restrict endptr, int base);
    491 
    492 /** The strtoull function converts the initial portion of the string pointed to
    493     by nptr to unsigned long long int representation.
    494 
    495     See the description for strtol for more information.
    496 
    497     @param[in]    nptr    Pointer to the string to be converted.
    498     @param[out]   endptr  If not NULL, points to an object to receive a pointer to the final string.
    499     @param[in]    base    The base, 0 to 36, of the number represented by the input string.
    500 
    501     @return   The strtoull function returns the converted value, if any. If no
    502               conversion could be performed, zero is returned. If the correct
    503               value is outside the range of representable values, ULLONG_MAX is
    504               returned and the value of the macro ERANGE is stored in errno.
    505 **/
    506 unsigned long long
    507         strtoull(const char * __restrict nptr, char ** __restrict endptr, int base);
    508 
    509 /* #########  Floating-point Numeric conversion functions  ################ */
    510 
    511 /** Convert the initial part of a string to double representation.
    512 
    513     @param[in]  nptr  Pointer to the string to be converted.
    514 
    515     @return   The floating-point value representing the string nptr.
    516 **/
    517 double  atof(const char *nptr);
    518 
    519 /** @{
    520     The strtod, strtof, and strtold functions convert the initial portion of
    521     the string pointed to by nptr to double, float, and long double
    522     representation, respectively. First, they decompose the input string into
    523     three parts: an initial, possibly empty, sequence of white-space characters
    524     (as specified by the isspace function), a subject sequence resembling a
    525     floating-point constant or representing an infinity or NaN; and a final
    526     string of one or more unrecognized characters, including the terminating
    527     null character of the input string. Then, they attempt to convert the
    528     subject sequence to a floating-point number, and return the result.
    529 */
    530 
    531 /** Convert a string to a double and point to the character after the last converted.
    532 
    533     @param[in]    nptr    Pointer to the string to be converted.
    534     @param[out]   endptr  If not NULL, points to an object to receive a pointer to the final string.
    535 
    536     @return   A floating-point value representing the string nptr.
    537               A pointer to the final string is stored in the object pointed to
    538               by endptr, provided that endptr is not a null pointer.
    539               If the subject sequence is empty or does not have the expected
    540               form, no conversion is performed; the value of nptr is stored in
    541               the object pointed to by endptr, provided that endptr is not a null pointer.
    542 **/
    543 double  strtod(const char * __restrict nptr, char ** __restrict endptr);
    544 
    545 /** Convert a string to a float and point to the character after the last converted.
    546 
    547     @param[in]    nptr    Pointer to the string to be converted.
    548     @param[out]   endptr  If not NULL, points to an object to receive a pointer to the final string.
    549 
    550     @return   A floating-point value representing the string nptr.
    551               A pointer to the final string is stored in the object pointed to
    552               by endptr, provided that endptr is not a null pointer.
    553               If the subject sequence is empty or does not have the expected
    554               form, no conversion is performed; the value of nptr is stored in
    555               the object pointed to by endptr, provided that endptr is not a null pointer.
    556 **/
    557 float   strtof(const char * __restrict nptr, char ** __restrict endptr);
    558 
    559 /** Convert a string to a long double and point to the character after the last converted.
    560 
    561     @param[in]    nptr    Pointer to the string to be converted.
    562     @param[out]   endptr  If not NULL, points to an object to receive a pointer to the final string.
    563 
    564     @return   A floating-point value representing the string nptr.
    565               A pointer to the final string is stored in the object pointed to
    566               by endptr, provided that endptr is not a null pointer.
    567               If the subject sequence is empty or does not have the expected
    568               form, no conversion is performed; the value of nptr is stored in
    569               the object pointed to by endptr, provided that endptr is not a null pointer.
    570 **/
    571 long double
    572         strtold(const char * __restrict nptr, char ** __restrict endptr);
    573 /*@}*/
    574 
    575 /* ################  Pseudo-random sequence generation functions  ######### */
    576 
    577 /** The rand function computes a sequence of pseudo-random integers in the
    578     range 0 to RAND_MAX.
    579 
    580     @return   The rand function returns a pseudo-random integer.
    581 **/
    582 int     rand(void);
    583 
    584 /** The srand function uses the argument as a seed for a new sequence of
    585     pseudo-random numbers to be returned by subsequent calls to rand.
    586 
    587     If srand is then called with the same seed value, the sequence of
    588     pseudo-random numbers shall be repeated. If rand is called before any calls
    589     to srand have been made, the same sequence shall be generated as when srand
    590     is first called with a seed value of 1.
    591 
    592     @param[in]  seed    The value used to "seed" the random number generator with.
    593 **/
    594 void    srand(unsigned seed);
    595 
    596 /* ################  Memory management functions  ######################### */
    597 
    598 /** The calloc function allocates space for an array of Num objects, each of
    599     whose size is Size.  The space is initialized to all bits zero.
    600 
    601     @param[in]  Num   The number of objects to allocate space for.
    602     @param[in]  Size  The size, in bytes, of each object.
    603 
    604     @return   NULL is returned if the space could not be allocated and errno
    605               contains the cause.  Otherwise, a pointer to an 8-byte aligned
    606               region of the requested size is returned.
    607 **/
    608 void   *calloc(size_t Num, size_t Size);
    609 
    610 /** The free function causes the space pointed to by Ptr to be deallocated,
    611     that is, made available for further allocation.
    612 
    613     If Ptr is a null pointer, no action occurs.  Otherwise, if the argument
    614     does not match a pointer earlier returned by the calloc, malloc, or realloc
    615     function, or if the space has been deallocated by a call to free or
    616     realloc, the behavior is undefined.
    617 
    618     @param  Ptr     Pointer to a previously allocated region of memory to be freed.
    619 **/
    620 void    free(void *Ptr);
    621 
    622 /** The malloc function allocates space for an object whose size is specified
    623     by size and whose value is indeterminate.
    624 
    625     This implementation uses the UEFI memory allocation boot services to get a
    626     region of memory that is 8-byte aligned and of the specified size.  The
    627     region is allocated with type EfiLoaderData.
    628 
    629     @param  Size    Size, in bytes, of the region to allocate.
    630 
    631     @return   NULL is returned if the space could not be allocated and errno
    632               contains the cause.  Otherwise, a pointer to an 8-byte aligned
    633               region of the requested size is returned.<BR>
    634               If NULL is returned, errno may contain:
    635               - EINVAL: Requested Size is zero.
    636               - ENOMEM: Memory could not be allocated.
    637 **/
    638 void   *malloc(size_t Size);
    639 
    640 /** The realloc function changes the size of the object pointed to by Ptr to
    641     the size specified by NewSize.
    642 
    643     The contents of the object are unchanged up to the lesser of the new and
    644     old sizes.  If the new size is larger, the value of the newly allocated
    645     portion of the object is indeterminate.
    646 
    647     If Ptr is a null pointer, the realloc function behaves like the malloc
    648     function for the specified size.
    649 
    650     If Ptr does not match a pointer earlier returned by the calloc, malloc, or
    651     realloc function, or if the space has been deallocated by a call to the free
    652     or realloc function, the behavior is undefined.
    653 
    654     If the space cannot be allocated, the object pointed to by Ptr is unchanged.
    655 
    656     If NewSize is zero and Ptr is not a null pointer, the object it points to
    657     is freed.
    658 
    659     This implementation uses the UEFI memory allocation boot services to get a
    660     region of memory that is 8-byte aligned and of the specified size.  The
    661     region is allocated with type EfiLoaderData.
    662 
    663     @param  Ptr     Pointer to a previously allocated region of memory to be resized.
    664     @param  NewSize Size, in bytes, of the new object to allocate space for.
    665 
    666     @return   NULL is returned if the space could not be allocated and errno
    667               contains the cause.  Otherwise, a pointer to an 8-byte aligned
    668               region of the requested size is returned.  If NewSize is zero,
    669               NULL is returned and errno will be unchanged.
    670 **/
    671 void   *realloc(void *Ptr, size_t NewSize);
    672 
    673 /* ################  Searching and Sorting utilities  ##################### */
    674 
    675 /** The bsearch function searches an array of Nmemb objects, the initial
    676     element of which is pointed to by Base, for an element that matches the
    677     object pointed to by Key. The size of each element of the array is
    678     specified by Size.
    679 
    680     The comparison function pointed to by Compar is called with two arguments
    681     that point to the Key object and to an array element, in that order. The
    682     function returns an integer less than, equal to, or greater than zero if
    683     the Key object is considered, respectively, to be less than, to match, or
    684     to be greater than the array element. The array consists of: all the
    685     elements that compare less than, all the elements that compare equal to,
    686     and all the elements that compare greater than the key object,
    687     in that order.
    688 
    689     @param[in]  Key     Pointer to the object to search for.
    690     @param[in]  Base    Pointer to the first element of an array to search.
    691     @param[in]  Nmemb   Number of objects in the search array.
    692     @param[in]  Size    The size of each object in the search array.
    693     @param[in]  Compar  Pointer to the function used to compare two objects.
    694 
    695     @return   The bsearch function returns a pointer to a matching element of the
    696               array, or a null pointer if no match is found. If two elements
    697               compare as equal, which element is matched is unspecified.
    698 **/
    699 void   *bsearch(  const void *Key,  const void *Base,
    700                   size_t Nmemb,     size_t Size,
    701                   int (*Compar)(const void *, const void *)
    702         );
    703 
    704 /** The qsort function sorts an array of Nmemb objects, the initial element of
    705     which is pointed to by Base.  The size of each object is specified by Size.
    706 
    707     The contents of the array are sorted into ascending order according to a
    708     comparison function pointed to by Compar, which is called with two
    709     arguments that point to the objects being compared. The function shall
    710     return an integer less than, equal to, or greater than zero if the first
    711     argument is considered to be respectively less than, equal to, or greater
    712     than the second.
    713 
    714     If two elements compare as equal, their order in the resulting sorted array
    715     is unspecified.
    716 
    717     @param[in,out]  Base    Pointer to the first element of an array to sort.
    718     @param[in]      Nmemb   Number of objects in the array.
    719     @param[in]      Size    The size of each object in the array.
    720     @param[in]      Compar  Pointer to the function used to compare two objects.
    721 **/
    722 void    qsort( void *base, size_t nmemb, size_t size,
    723                int (*compar)(const void *, const void *));
    724 
    725 /* ################  Multibyte/wide character conversion functions  ####### */
    726 
    727 /** Determine the number of bytes comprising a multibyte character.
    728 
    729   If S is not a null pointer, the mblen function determines the number of bytes
    730   contained in the multibyte character pointed to by S. Except that the
    731   conversion state of the mbtowc function is not affected, it is equivalent to
    732     mbtowc((wchar_t *)0, S, N);
    733 
    734   @param[in]  S   NULL to query whether multibyte characters have
    735                   state-dependent encodings.  Otherwise, points to a
    736                   multibyte character.
    737   @param[in]  N   The maximum number of bytes in a multibyte character.
    738 
    739   @return   If S is a null pointer, the mblen function returns a nonzero or
    740             zero value, if multibyte character encodings, respectively, do
    741             or do not have state-dependent encodings. If S is not a null
    742             pointer, the mblen function either returns 0 (if S points to the
    743             null character), or returns the number of bytes that are contained
    744             in the multibyte character (if the next N or fewer bytes form a
    745             valid multibyte character), or returns -1 (if they do not form a
    746             valid multibyte character).
    747 **/
    748 int     mblen(const char *S, size_t N);
    749 
    750 /** Convert a multibyte character into a wide character.
    751 
    752     If S is not a null pointer, the mbtowc function inspects at most N bytes
    753     beginning with the byte pointed to by S to determine the number of bytes
    754     needed to complete the next multibyte character (including any shift
    755     sequences). If the function determines that the next multibyte character
    756     is complete and valid, it determines the value of the corresponding wide
    757     character and then, if Pwc is not a null pointer, stores that value in
    758     the object pointed to by Pwc. If the corresponding wide character is the
    759     null wide character, the function is left in the initial conversion state.
    760 
    761     @param[out]   Pwc Pointer to a wide-character object to receive the converted character.
    762     @param[in]    S   Pointer to a multibyte character to convert.
    763     @param[in]    N   Maximum number of bytes in a multibyte character.
    764 
    765     @return   If S is a null pointer, the mbtowc function returns a nonzero or
    766               zero value, if multibyte character encodings, respectively, do
    767               or do not have state-dependent encodings. If S is not a null
    768               pointer, the mbtowc function either returns 0 (if S points to
    769               the null character), or returns the number of bytes that are
    770               contained in the converted multibyte character (if the next N or
    771               fewer bytes form a valid multibyte character), or returns -1
    772               (if they do not form a valid multibyte character).
    773 
    774               In no case will the value returned be greater than N or the value
    775               of the MB_CUR_MAX macro.
    776 **/
    777 int     mbtowc(wchar_t * __restrict Pwc, const char * __restrict S, size_t N);
    778 
    779 /** Convert a wide character into a multibyte character.
    780 
    781     The wctomb function determines the number of bytes needed to represent the
    782     multibyte character corresponding to the wide character given by WC
    783     (including any shift sequences), and stores the multibyte character
    784     representation in the array whose first element is pointed to by S (if S is
    785     not a null pointer). At most MB_CUR_MAX characters are stored. If WC is a
    786     null wide character, a null byte is stored, preceded by any shift sequence
    787     needed to restore the initial shift state, and the function is left in the
    788     initial conversion state.
    789 
    790     @param[out]   S   Pointer to the object to receive the converted multibyte character.
    791     @param[in]    WC  Wide character to be converted.
    792 
    793     @return   If S is a null pointer, the wctomb function returns a nonzero or
    794               zero value, if multibyte character encodings, respectively, do or
    795               do not have state-dependent encodings. If S is not a null pointer,
    796               the wctomb function returns -1 if the value of WC does not
    797               correspond to a valid multibyte character, or returns the number
    798               of bytes that are contained in the multibyte character
    799               corresponding to the value of WC.
    800 
    801               In no case will the value returned be greater than the value of
    802               the MB_CUR_MAX macro.
    803 **/
    804 int     wctomb(char *S, wchar_t WC);
    805 
    806 /* ################  Multibyte/wide string conversion functions  ########## */
    807 
    808 /** Convert a multibyte character string into a wide-character string.
    809 
    810     The mbstowcs function converts a sequence of multibyte characters that
    811     begins in the initial shift state from the array pointed to by Src into
    812     a sequence of corresponding wide characters and stores not more than limit
    813     wide characters into the array pointed to by Dest.  No multibyte
    814     characters that follow a null character (which is converted into a null
    815     wide character) will be examined or converted. Each multibyte character
    816     is converted as if by a call to the mbtowc function, except that the
    817     conversion state of the mbtowc function is not affected.
    818 
    819     No more than Limit elements will be modified in the array pointed to by Dest.
    820     If copying takes place between objects that overlap,
    821     the behavior is undefined.
    822 
    823     @param[out]   Dest    Pointer to the array to receive the converted string.
    824     @param[in]    Src     Pointer to the string to be converted.
    825     @param[in]    Limit   Maximum number of elements to be written to Dest.
    826 
    827     @return   If an invalid multibyte character is encountered, the mbstowcs
    828               function returns (size_t)(-1). Otherwise, the mbstowcs function
    829               returns the number of array elements modified, not including a
    830               terminating null wide character, if any.
    831 **/
    832 size_t  mbstowcs(wchar_t * __restrict Dest, const char * __restrict Src, size_t Limit);
    833 
    834 /** Convert a wide-character string into a multibyte character string.
    835 
    836     The wcstombs function converts a sequence of wide characters from the
    837     array pointed to by Src into a sequence of corresponding multibyte
    838     characters that begins in the initial shift state, and stores these
    839     multibyte characters into the array pointed to by Dest, stopping if a
    840     multibyte character would exceed the limit of Limit total bytes or if a
    841     null character is stored. Each wide character is converted as if by
    842     a call to the wctomb function, except that the conversion state of
    843     the wctomb function is not affected.
    844 
    845     No more than Limit bytes will be modified in the array pointed to by Dest.
    846     If copying takes place between objects that overlap,
    847     the behavior is undefined.
    848 
    849     @param[out]   Dest    Pointer to the array to receive the converted string.
    850     @param[in]    Src     Pointer to the string to be converted.
    851     @param[in]    Limit   Maximum number of bytes to be written to Dest.
    852 
    853     @return   If a wide character is encountered that does not correspond to a
    854               valid multibyte character, the wcstombs function returns
    855               (size_t)(-1). Otherwise, the wcstombs function returns the number
    856               of bytes modified, not including a terminating null character,
    857               if any.
    858 **/
    859 size_t  wcstombs(char * __restrict Dest, const wchar_t * __restrict Src, size_t Limit);
    860 
    861 /* ##############  Miscelaneous functions for *nix compatibility  ########## */
    862 
    863 /** The realpath() function shall derive, from the pathname pointed to by
    864     file_name, an absolute pathname that names the same file, whose resolution
    865     does not involve '.', '..', or symbolic links. The generated pathname shall
    866     be stored as a null-terminated string, up to a maximum of {PATH_MAX} bytes,
    867     in the buffer pointed to by resolved_name.
    868 
    869     If resolved_name is a null pointer, the behavior of realpath() is
    870     implementation-defined.
    871 
    872     @param[in]      file_name         The filename to convert.
    873     @param[in,out]  resolved_name     The resultant name.
    874 
    875     @retval NULL                    An error occured.
    876     @retval resolved_name.
    877 **/
    878 char * realpath(char *file_name, char *resolved_name);
    879 
    880 /** The getprogname() function returns the name of the program.  If the name
    881     has not been set yet, it will return NULL.
    882 
    883   @return   The getprogname function returns NULL if the program's name has not
    884             been set, otherwise it returns the name of the program.
    885 **/
    886 const char * getprogname(void);
    887 
    888 /** The setprogname() function sets the name of the program.
    889 
    890   @param[in]  progname    The name of the program.  This memory must be retained
    891                           by the caller until no calls to "getprogname" will be
    892                           called.
    893 **/
    894 void setprogname(const char *progname);
    895 
    896 /* ###############  Functions specific to this implementation  ############# */
    897 
    898 /*  Determine the number of bytes needed to represent a Wide character
    899     as a MBCS character.
    900 
    901     A single wide character may convert into a one, two, three, or four byte
    902     narrow (MBCS or UTF-8) character.  The number of MBCS bytes can be determined
    903     as follows.
    904 
    905     If WCS char      < 0x00000080      One Byte
    906     Else if WCS char < 0x0000D800      Two Bytes
    907     Else                               Three Bytes
    908 
    909     Since UEFI only supports the Unicode Base Multilingual Plane (BMP),
    910     Four-byte characters are not supported.
    911 
    912     @param[in]    InCh      Wide character to test.
    913 
    914     @retval     -1      Improperly formed character
    915     @retval      0      InCh is 0x0000
    916     @retval     >0      Number of bytes needed for the MBCS character
    917 */
    918 int
    919 EFIAPI
    920 OneWcToMcLen(const wchar_t InCh);
    921 
    922 /*  Determine the number of bytes needed to represent a Wide character string
    923     as a MBCS string of given maximum length.  Will optionally return the number
    924     of wide characters that would be consumed.
    925 
    926     @param[in]    Src       Pointer to a wide character string.
    927     @param[in]    Limit     Maximum number of bytes the converted string may occupy.
    928     @param[out]   NumChar   Pointer to where to store the number of wide characters, or NULL.
    929 
    930     @return     The number of bytes required to convert Src to MBCS,
    931                 not including the terminating NUL.  If NumChar is not NULL, the number
    932                 of characters represented by the return value will be written to
    933                 where it points.
    934 **/
    935 size_t
    936 EFIAPI
    937 EstimateWtoM(const wchar_t * Src, size_t Limit, size_t *NumChar);
    938 
    939 /** Determine the number of characters in a MBCS string.
    940 
    941     @param[in]    Src     The string to examine
    942 
    943     @return   The number of characters represented by the MBCS string.
    944 **/
    945 size_t
    946 EFIAPI
    947 CountMbcsChars(const char *Src);
    948 
    949 __END_DECLS
    950 
    951 #endif  /* _STDLIB_H */
    952