Home | History | Annotate | Download | only in Include
      1 /** @file
      2     The header <string.h> declares one type and several functions, and defines
      3     one macro useful for manipulating arrays of character type and other objects
      4     treated as arrays of character type.  Various methods are used for
      5     determining the lengths of the arrays, but in all cases a char * or void *
      6     argument points to the initial (lowest addressed) character of the array. If
      7     an array is accessed beyond the end of an object, the behavior is undefined.
      8 
      9     Where an argument declared as size_t n specifies the length of the array for
     10     a function, n can have the value zero on a call to that function. Unless
     11     explicitly stated otherwise in the description of those functions, pointer
     12     arguments on such a call must still have valid values.
     13 
     14     For all functions declared in this header, each character shall be
     15     interpreted as if it had the type unsigned char (and therefore every possible
     16     object representation is valid and has a different value).
     17 
     18     The following macros are defined in this file:<BR>
     19     @verbatim
     20       NULL
     21       bcopy(a,b,c)    ( memcpy((void *)b, (const void *)a, (size_t)c))
     22       bcmp(a,b,c)     ( memcmp((void *)a, (void *)b, (size_t)c))
     23     @endverbatim
     24 
     25     The following types are defined in this file:<BR>
     26     @verbatim
     27       size_t      Unsigned integer type of the result of the sizeof operator.
     28     @endverbatim
     29 
     30     The following functions are declared in this file:<BR>
     31     @verbatim
     32       ################ Copying Functions
     33       void     *memcpy      (void * __restrict s1, const void * __restrict s2, size_t n);
     34       void     *memmove     (void *s1, const void *s2, size_t n);
     35       char     *strcpy      (char * __restrict s1, const char * __restrict s2);
     36       char     *strncpy     (char * __restrict s1, const char * __restrict s2, size_t n);
     37       int       strncpyX    (char * __restrict s1, const char * __restrict s2, size_t n);
     38 
     39       ################ Concatenation Functions
     40       char     *strcat      (char * __restrict s1, const char * __restrict s2);
     41       char     *strncat     (char * __restrict s1, const char * __restrict s2, size_t n);
     42       int       strncatX    (char * __restrict s1, const char * __restrict s2, size_t n);
     43 
     44       ################ Comparison Functions
     45       int       memcmp      (const void *s1, const void *s2, size_t n);
     46       int       strcmp      (const char *s1, const char *s2);
     47       int       strcoll     (const char *s1, const char *s2);
     48       int       strncmp     (const char *s1, const char *s2, size_t n);
     49       size_t    strxfrm     (char * __restrict s1, const char * __restrict s2, size_t n);
     50 
     51       ################ Search Functions
     52       void     *memchr      (const void *s, int c, size_t n);
     53       char     *strchr      (const char *s, int c);
     54       size_t    strcspn     (const char *s1, const char *s2);
     55       char     *strpbrk     (const char *s1, const char *s2);
     56       char     *strrchr     (const char *s, int c);
     57       size_t    strspn      (const char *s1 , const char *s2);
     58       char     *strstr      (const char *s1 , const char *s2);
     59       char     *strtok      (char * __restrict s1, const char * __restrict s2);
     60 
     61       ################ Miscellaneous Functions
     62       void     *memset      (void *s, int c, size_t n);
     63       char     *strerror    (int num);
     64       size_t    strlen      (const char *);
     65 
     66       ################ BSD Compatibility Functions
     67       char     *strdup      (const char *);
     68       int       strerror_r  (int, char *, size_t);
     69       int       strcasecmp  (const char *s1, const char *s2);
     70       void     *memccpy     (void *, const void *, int, size_t);
     71       int       strncasecmp (const char *s1, const char *s2, size_t n);
     72       size_t    strlcpy     (char *destination, const char *source, size_t size);
     73       size_t    strlcat     (char *destination, const char *source, size_t size);
     74       char     *strsep      (register char **stringp, register const char *delim);
     75     @endverbatim
     76 
     77     Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
     78     This program and the accompanying materials are licensed and made available under
     79     the terms and conditions of the BSD License that accompanies this distribution.
     80     The full text of the license may be found at
     81     http://opensource.org/licenses/bsd-license.
     82 
     83     THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     84     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     85 **/
     86 #ifndef _STRING_H
     87 #define _STRING_H
     88 #include  <sys/EfiCdefs.h>
     89 
     90 #ifdef _EFI_SIZE_T_
     91   typedef _EFI_SIZE_T_  size_t;
     92   #undef _EFI_SIZE_T_
     93   #undef _BSD_SIZE_T_
     94 #endif
     95 
     96 __BEGIN_DECLS
     97 
     98 /* ################   Copying Functions   ################################# */
     99 
    100 /** The memcpy function copies N characters from the object pointed to by Src
    101     into the object pointed to by Dest. If copying takes place between objects
    102     that overlap, the behavior is undefined.
    103 
    104     @param[out]   Dest  Pointer to the destination of the copy operation.
    105     @param[in]    Src   Pointer to the Source data to be copied.
    106     @param[in]    N     Number of characters (bytes) to be copied.
    107 
    108     @return   The memcpy function returns the value of Dest.
    109 **/
    110 void     *memcpy(void * __restrict Dest, const void * __restrict Src, size_t N);
    111 
    112 /** The memmove function copies N characters from the object pointed to by Src
    113     into the object pointed to by Dest. Copying takes place as if the N
    114     characters from the object pointed to by Src are first copied into a
    115     temporary array of N characters that does not overlap the objects pointed
    116     to by Dest and Src, and then the N characters from the temporary array are
    117     copied into the object pointed to by Dest.
    118 
    119     @param[out]   Dest  Pointer to the destination of the copy operation.
    120     @param[in]    Src   Pointer to the Source data to be copied.
    121     @param[in]    N     Number of characters (bytes) to be copied.
    122 
    123     @return   The memmove function returns the value of Dest.
    124 **/
    125 void     *memmove(void *Dest, const void *Src, size_t N);
    126 
    127 /** The strcpy function copies the string pointed to by Src (including the
    128     terminating null character) into the array pointed to by Dest. If copying
    129     takes place between objects that overlap, the behavior is undefined.
    130 
    131     @param[out]   Dest  Pointer to the destination of the copy operation.
    132     @param[in]    Src   Pointer to the Source data to be copied.
    133 
    134     @return   The strcpy function returns the value of Dest.
    135 **/
    136 char     *strcpy(char * __restrict Dest, const char * __restrict Src);
    137 
    138 /** The strncpy function copies not more than N characters (characters that
    139     follow a null character are not copied) from the array pointed to by Src to
    140     the array pointed to by Dest. If copying takes place between objects that
    141     overlap, the behavior is undefined.
    142 
    143     If the array pointed to by Src is a string that is shorter than N
    144     characters, null characters are appended to the copy in the array pointed
    145     to by Dest, until N characters in all have been written.
    146 
    147     @param[out]   Dest  Pointer to the destination of the copy operation.
    148     @param[in]    Src   Pointer to the Source data to be copied.
    149     @param[in]    N     Number of characters (bytes) to be copied.
    150 
    151     @return   The strncpy function returns the value of Dest.
    152 **/
    153 char     *strncpy(char * __restrict Dest, const char * __restrict Src, size_t N);
    154 
    155 /** The strncpyX function copies not more than N-1 characters (characters that
    156     follow a null character are not copied) from the array pointed to by Src to
    157     the array pointed to by Dest. Array Dest is guaranteed to be NULL terminated.
    158     If copying takes place between objects that overlap,
    159     the behavior is undefined.
    160 
    161     strncpyX exists because normal strncpy does not indicate if the copy was
    162     terminated because of exhausting the buffer or reaching the end of Src.
    163 
    164     @param[out]   Dest  Pointer to the destination of the copy operation.
    165     @param[in]    Src   Pointer to the Source data to be copied.
    166     @param[in]    N     Number of characters (bytes) to be copied.
    167 
    168     @return   The strncpyX function returns 0 if the copy operation was
    169               terminated because it reached the end of Dest.  Otherwise,
    170               a non-zero value is returned indicating how many characters
    171               remain in Dest.
    172 **/
    173 int       strncpyX(char * __restrict Dest, const char * __restrict Src, size_t N);
    174 
    175 /* ################   Concatenation Functions   ########################### */
    176 
    177 /** The strcat function appends a copy of the string pointed to by Src
    178     (including the terminating null character) to the end of the string pointed
    179     to by Dest. The initial character of Src overwrites the null character at the
    180     end of Dest. If copying takes place between objects that overlap, the
    181     behavior is undefined.
    182 
    183     @param[out]   Dest  Pointer to the destination of the concatenation operation.
    184     @param[in]    Src   Pointer to the Source data to be concatenated.
    185 
    186     @return   The strcat function returns the value of Dest.
    187 **/
    188 char     *strcat(char * __restrict Dest, const char * __restrict Src);
    189 
    190 /** The strncat function appends not more than N characters (a null character
    191     and characters that follow it are not appended) from the array pointed to
    192     by Src to the end of the string pointed to by Dest. The initial character of
    193     Src overwrites the null character at the end of Dest. A terminating null
    194     character is always appended to the result. If copying takes place
    195     between objects that overlap, the behavior is undefined.
    196 
    197     @param[out]   Dest  Pointer to the destination of the concatenation operation.
    198     @param[in]    Src   Pointer to the Source data to be concatenated.
    199     @param[in]    N     Max Number of characters (bytes) to be concatenated.
    200 
    201     @return   The strncat function returns the value of Dest.
    202 **/
    203 char     *strncat(char * __restrict Dest, const char * __restrict Src, size_t N);
    204 
    205 /** The strncatX function appends not more than N characters (a null character
    206     and characters that follow it are not appended) from the array pointed to
    207     by Src to the end of the string pointed to by Dest. The initial character of
    208     Src overwrites the null character at the end of Dest. The result is always
    209     terminated with a null character. If copying takes place between objects
    210     that overlap, the behavior is undefined.
    211 
    212     strncatX exists because normal strncat does not indicate if the operation
    213     was terminated because of exhausting N or reaching the end of Src.
    214 
    215     @param[out]   Dest  Pointer to the destination of the concatenation operation.
    216     @param[in]    Src   Pointer to the Source data to be concatenated.
    217     @param[in]    N     Max Number of characters (bytes) to be concatenated.
    218 
    219     @return   The strncatX function returns 0 if the operation was terminated
    220               because it reached the end of Dest.  Otherwise, a non-zero value is
    221               returned indicating how many characters remain in Dest.
    222 **/
    223 int       strncatX(char * __restrict s1, const char * __restrict s2, size_t n);
    224 
    225 /* ################   Comparison Functions   ############################## */
    226 
    227 /** The memcmp function compares the first N characters of the object pointed
    228     to by S1 to the first N characters of the object pointed to by S2.
    229 
    230     @param[out]   S1  Pointer to the first object to be compared.
    231     @param[in]    S2  Pointer to the object to be compared to S1.
    232     @param[in]    N   Max Number of characters (bytes) to be compared.
    233 
    234     @return   The memcmp function returns an integer greater than, equal to, or
    235               less than zero, accordingly as the object pointed to by S1 is
    236               greater than, equal to, or less than the object pointed to by S2.
    237 **/
    238 int       memcmp(const void *S1, const void *S2, size_t N);
    239 
    240 /** The strcmp function compares the string pointed to by S1 to the string
    241     pointed to by S2.
    242 
    243     @param[out]   S1  Pointer to the first string to be compared.
    244     @param[in]    S2  Pointer to the string to be compared to S1.
    245 
    246     @return   The strcmp function returns an integer greater than, equal to, or
    247               less than zero, accordingly as the string pointed to by S1 is
    248               greater than, equal to, or less than the string pointed to by S2.
    249 **/
    250 int       strcmp(const char *S1, const char *S2);
    251 
    252 /** The strcoll function compares the string pointed to by S1 to the string
    253     pointed to by S2, both interpreted as appropriate to the LC_COLLATE
    254     category of the current locale.
    255 
    256     @param[out]   S1  Pointer to the first string to be compared.
    257     @param[in]    S2  Pointer to the string to be compared to S1.
    258 
    259     @return   The strcoll function returns an integer greater than, equal to,
    260               or less than zero, accordingly as the string pointed to by S1 is
    261               greater than, equal to, or less than the string pointed to by S2
    262               when both are interpreted as appropriate to the current locale.
    263 **/
    264 int       strcoll(const char *S1, const char *S2);
    265 
    266 /** The strncmp function compares not more than N characters (characters that
    267     follow a null character are not compared) from the array pointed to by S1
    268     to the array pointed to by S2.
    269 
    270     @param[out]   S1  Pointer to the first object to be compared.
    271     @param[in]    S2  Pointer to the object to be compared to S1.
    272     @param[in]    N   Max Number of characters (bytes) to be compared.
    273 
    274     @return   The strncmp function returns an integer greater than, equal to,
    275               or less than zero, accordingly as the possibly null-terminated
    276               array pointed to by S1 is greater than, equal to, or less than
    277               the possibly null-terminated array pointed to by S2.
    278 **/
    279 int       strncmp(const char *S1, const char *S2, size_t N);
    280 
    281 /** The strxfrm function transforms the string pointed to by Src and places the
    282     resulting string into the array pointed to by Dest. The transformation is
    283     such that if the strcmp function is applied to two transformed strings, it
    284     returns a value greater than, equal to, or less than zero, corresponding to
    285     the result of the strcoll function applied to the same two original
    286     strings. No more than N characters are placed into the resulting array
    287     pointed to by Dest, including the terminating null character. If N is zero,
    288     Dest is permitted to be a null pointer. If copying takes place between
    289     objects that overlap, the behavior is undefined.
    290 
    291     @param[out]   Dest  Pointer to the object to receive the transformed string.
    292     @param[in]    Src   Pointer to the string to be transformed.
    293     @param[in]    N     Max Number of characters (bytes) to be transformed.
    294 
    295     @return   The strxfrm function returns the length of the transformed string
    296               (not including the terminating null character). If the value
    297               returned is N or more, the contents of the array pointed to by Dest
    298               are indeterminate.
    299 **/
    300 size_t    strxfrm(char * __restrict Dest, const char * __restrict Src, size_t N);
    301 
    302 /* ################   Search Functions   ################################## */
    303 
    304 /** The memchr function locates the first occurrence of C (converted to an
    305     unsigned char) in the initial N characters (each interpreted as
    306     unsigned char) of the object pointed to by S.
    307 
    308     @param[in]    S   Pointer to the object to be searched.
    309     @param[in]    C   The character value to search for.
    310     @param[in]    N   Max Number of characters (bytes) to be searched.
    311 
    312     @return   The memchr function returns a pointer to the located character,
    313               or a null pointer if the character does not occur in the object.
    314 **/
    315 void     *memchr(const void *S, int C, size_t N);
    316 
    317 /** The strchr function locates the first occurrence of C (converted to a char)
    318     in the string pointed to by S. The terminating null character is considered
    319     to be part of the string.
    320 
    321     @param[in]    S   Pointer to the object to be searched.
    322     @param[in]    C   The character value to search for.
    323 
    324     @return   The strchr function returns a pointer to the located character,
    325               or a null pointer if the character does not occur in the string.
    326 **/
    327 char     *strchr(const char *S, int C);
    328 
    329 /** The strcspn function computes the length of the maximum initial segment of
    330     the string pointed to by S1 which consists entirely of characters NOT from
    331     the string pointed to by S2.
    332 
    333     @param[in]    S1  Pointer to the object to be searched.
    334     @param[in]    S2  Pointer to the list of characters to search for.
    335 
    336     @return   The strcspn function returns the length of the segment.
    337 **/
    338 size_t    strcspn(const char *S1, const char *S2);
    339 
    340 /** The strpbrk function locates the first occurrence in the string pointed to
    341     by S1 of any character from the string pointed to by S2.
    342 
    343     @param[in]    S1  Pointer to the object to be searched.
    344     @param[in]    S2  Pointer to the list of characters to search for.
    345 
    346     @return   The strpbrk function returns a pointer to the character, or a
    347               null pointer if no character from S2 occurs in S1.
    348 **/
    349 char     *strpbrk(const char *S1, const char *S2);
    350 
    351 /** The strrchr function locates the last occurrence of C (converted to a char)
    352     in the string pointed to by S. The terminating null character is considered
    353     to be part of the string.
    354 
    355     @param[in]    S   Pointer to the object to be searched.
    356     @param[in]    C   The character value to search for.
    357 
    358     @return   The strrchr function returns a pointer to the character, or a
    359               null pointer if C does not occur in the string.
    360 **/
    361 char     *strrchr(const char *S, int C);
    362 
    363 /** The strspn function computes the length of the maximum initial segment of
    364     the string pointed to by S1 which consists entirely of characters from the
    365     string pointed to by S2.
    366 
    367     @param[in]    S1  Pointer to the object to be searched.
    368     @param[in]    S2  Pointer to the list of characters to search for.
    369 
    370     @return   The strspn function returns the length of the segment.
    371 **/
    372 size_t    strspn(const char *S1 , const char *S2);
    373 
    374 /** The strstr function locates the first occurrence in the string pointed to
    375     by S1 of the sequence of characters (excluding the terminating null
    376     character) in the string pointed to by S2.
    377 
    378     @param[in]    S1  Pointer to the object to be searched.
    379     @param[in]    S2  Pointer to the sequence of characters to search for.
    380 
    381     @return   The strstr function returns a pointer to the located string, or a
    382               null pointer if the string is not found. If S2 points to a string
    383               with zero length, the function returns S1.
    384 **/
    385 char     *strstr(const char *S1 , const char *S2);
    386 
    387 /** Break a string into a sequence of tokens.
    388 
    389     A sequence of calls to the strtok function breaks the string pointed to by
    390     S1 into a sequence of tokens, each of which is delimited by a character
    391     from the string pointed to by S2. The first call in the sequence has a
    392     non-null first argument; subsequent calls in the sequence have a null first
    393     argument. The separator string pointed to by S2 may be different from call
    394     to call.
    395 
    396     The first call in the sequence searches the string pointed to by S1 for the
    397     first character that is not contained in the current separator string
    398     pointed to by S2. If no such character is found, then there are no tokens
    399     in the string pointed to by S1 and the strtok function returns a null
    400     pointer. If such a character is found, it is the start of the first token.
    401 
    402     The strtok function then searches from there for a character that is
    403     contained in the current separator string. If no such character is found,
    404     the current token extends to the end of the string pointed to by S1, and
    405     subsequent searches for a token will return a null pointer. If such a
    406     character is found, it is overwritten by a null character, which terminates
    407     the current token. The strtok function saves a pointer to the following
    408     character, from which the next search for a token will start.
    409 
    410     Each subsequent call, with a null pointer as the value of the first
    411     argument, starts searching from the saved pointer and behaves as
    412     described above.
    413 
    414     @param[in]    S1  Pointer to the string to be tokenized.
    415     @param[in]    S2  Pointer to a list of separator characters.
    416 
    417     @return   The strtok function returns a pointer to the first character of a
    418               token, or a null pointer if there is no token.
    419 **/
    420 char     *strtok(char * __restrict S1, const char * __restrict S2);
    421 
    422 /* ################   Miscellaneous Functions   ########################### */
    423 
    424 /** The memset function copies the value of C (converted to an unsigned char)
    425     into each of the first N characters of the object pointed to by S.
    426 
    427     @param[out]   S   Pointer to the first element of the object to be set.
    428     @param[in]    C   Value to store in each element of S.
    429     @param[in]    N   Number of elements in S to be set.
    430 
    431     @return   The memset function returns the value of S.
    432 **/
    433 void     *memset(void *S, int C, size_t N);
    434 
    435 /** The strerror function maps the number in Num to a message string.
    436     Typically, the values for Num come from errno, but strerror shall map
    437     any value of type int to a message.
    438 
    439     @param[in]  Num   A value to be converted to a message.
    440 
    441     @return   The strerror function returns a pointer to the string, the
    442               contents of which are locale specific.  The array pointed to
    443               must not be modified by the program, but may be overwritten by
    444               a subsequent call to the strerror function.
    445 **/
    446 char     *strerror(int Num);
    447 
    448 /** The strlen function computes the length of the string pointed to by S.
    449 
    450     @param[in]  S   Pointer to the string to determine the length of.
    451 
    452     @return   The strlen function returns the number of characters that
    453               precede the terminating null character.
    454 **/
    455 size_t    strlen(const char *S);
    456 
    457 
    458 /* ################   BSD Compatibility Functions   ####################### */
    459 
    460 char   *strdup    (const char *);
    461 int     strerror_r(int, char *, size_t);
    462 int     strcasecmp(const char *s1, const char *s2);
    463 void   *memccpy   (void *, const void *, int, size_t);
    464 int     strncasecmp(const char *s1, const char *s2, size_t n);
    465 size_t  strlcpy(char *destination, const char *source, size_t size);
    466 size_t  strlcat(char *destination, const char *source, size_t size);
    467 
    468 // bcopy is is a void function with the src/dest arguments reversed, being used in socket lib
    469 #define bcopy(a,b,c) ( memcpy((void *)b, (const void *)a, (size_t)c))
    470 
    471 // bcmp is same as memcmp, returns 0 for successful compare, non-zero otherwise
    472 #define bcmp(a,b,c) ( memcmp((void *)a, (void *)b, (size_t)c))
    473 
    474 /*
    475  * Get next token from string *stringp, where tokens are possibly-empty
    476  * strings separated by characters from delim.
    477  *
    478  * Writes NULs into the string at *stringp to end tokens.
    479  * delim need not remain constant from call to call.
    480  * On return, *stringp points past the last NUL written (if there might
    481  * be further tokens), or is NULL (if there are definitely no more tokens).
    482  *
    483  * If *stringp is NULL, strsep returns NULL.
    484  */
    485 char *
    486 strsep(
    487   register char **stringp,
    488   register const char *delim
    489   );
    490 
    491 __END_DECLS
    492 
    493 #endif  /* _STRING_H */
    494