| /** @file | |
| The header <string.h> declares one type and several functions, and defines | |
| one macro useful for manipulating arrays of character type and other objects | |
| treated as arrays of character type. Various methods are used for | |
| determining the lengths of the arrays, but in all cases a char * or void * | |
| argument points to the initial (lowest addressed) character of the array. If | |
| an array is accessed beyond the end of an object, the behavior is undefined. | |
| Where an argument declared as size_t n specifies the length of the array for | |
| a function, n can have the value zero on a call to that function. Unless | |
| explicitly stated otherwise in the description of those functions, pointer | |
| arguments on such a call must still have valid values. | |
| For all functions declared in this header, each character shall be | |
| interpreted as if it had the type unsigned char (and therefore every possible | |
| object representation is valid and has a different value). | |
| The following macros are defined in this file:<BR> | |
| @verbatim | |
| NULL | |
| bcopy(a,b,c) ( memcpy((void *)b, (const void *)a, (size_t)c)) | |
| bcmp(a,b,c) ( memcmp((void *)a, (void *)b, (size_t)c)) | |
| @endverbatim | |
| The following types are defined in this file:<BR> | |
| @verbatim | |
| size_t Unsigned integer type of the result of the sizeof operator. | |
| @endverbatim | |
| The following functions are declared in this file:<BR> | |
| @verbatim | |
| ################ Copying Functions | |
| void *memcpy (void * __restrict s1, const void * __restrict s2, size_t n); | |
| void *memmove (void *s1, const void *s2, size_t n); | |
| char *strcpy (char * __restrict s1, const char * __restrict s2); | |
| char *strncpy (char * __restrict s1, const char * __restrict s2, size_t n); | |
| int strncpyX (char * __restrict s1, const char * __restrict s2, size_t n); | |
| ################ Concatenation Functions | |
| char *strcat (char * __restrict s1, const char * __restrict s2); | |
| char *strncat (char * __restrict s1, const char * __restrict s2, size_t n); | |
| int strncatX (char * __restrict s1, const char * __restrict s2, size_t n); | |
| ################ Comparison Functions | |
| int memcmp (const void *s1, const void *s2, size_t n); | |
| int strcmp (const char *s1, const char *s2); | |
| int strcoll (const char *s1, const char *s2); | |
| int strncmp (const char *s1, const char *s2, size_t n); | |
| size_t strxfrm (char * __restrict s1, const char * __restrict s2, size_t n); | |
| ################ Search Functions | |
| void *memchr (const void *s, int c, size_t n); | |
| char *strchr (const char *s, int c); | |
| size_t strcspn (const char *s1, const char *s2); | |
| char *strpbrk (const char *s1, const char *s2); | |
| char *strrchr (const char *s, int c); | |
| size_t strspn (const char *s1 , const char *s2); | |
| char *strstr (const char *s1 , const char *s2); | |
| char *strtok (char * __restrict s1, const char * __restrict s2); | |
| ################ Miscellaneous Functions | |
| void *memset (void *s, int c, size_t n); | |
| char *strerror (int num); | |
| size_t strlen (const char *); | |
| ################ BSD Compatibility Functions | |
| char *strdup (const char *); | |
| int strerror_r (int, char *, size_t); | |
| int strcasecmp (const char *s1, const char *s2); | |
| void *memccpy (void *, const void *, int, size_t); | |
| int strncasecmp (const char *s1, const char *s2, size_t n); | |
| size_t strlcpy (char *destination, const char *source, size_t size); | |
| size_t strlcat (char *destination, const char *source, size_t size); | |
| char *strsep (register char **stringp, register const char *delim); | |
| @endverbatim | |
| Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are licensed and made available under | |
| the terms and conditions of the BSD License that accompanies this distribution. | |
| The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef _STRING_H | |
| #define _STRING_H | |
| #include <sys/EfiCdefs.h> | |
| #ifdef _EFI_SIZE_T_ | |
| typedef _EFI_SIZE_T_ size_t; | |
| #undef _EFI_SIZE_T_ | |
| #undef _BSD_SIZE_T_ | |
| #endif | |
| __BEGIN_DECLS | |
| /* ################ Copying Functions ################################# */ | |
| /** The memcpy function copies N characters from the object pointed to by Src | |
| into the object pointed to by Dest. If copying takes place between objects | |
| that overlap, the behavior is undefined. | |
| @param[out] Dest Pointer to the destination of the copy operation. | |
| @param[in] Src Pointer to the Source data to be copied. | |
| @param[in] N Number of characters (bytes) to be copied. | |
| @return The memcpy function returns the value of Dest. | |
| **/ | |
| void *memcpy(void * __restrict Dest, const void * __restrict Src, size_t N); | |
| /** The memmove function copies N characters from the object pointed to by Src | |
| into the object pointed to by Dest. Copying takes place as if the N | |
| characters from the object pointed to by Src are first copied into a | |
| temporary array of N characters that does not overlap the objects pointed | |
| to by Dest and Src, and then the N characters from the temporary array are | |
| copied into the object pointed to by Dest. | |
| @param[out] Dest Pointer to the destination of the copy operation. | |
| @param[in] Src Pointer to the Source data to be copied. | |
| @param[in] N Number of characters (bytes) to be copied. | |
| @return The memmove function returns the value of Dest. | |
| **/ | |
| void *memmove(void *Dest, const void *Src, size_t N); | |
| /** The strcpy function copies the string pointed to by Src (including the | |
| terminating null character) into the array pointed to by Dest. If copying | |
| takes place between objects that overlap, the behavior is undefined. | |
| @param[out] Dest Pointer to the destination of the copy operation. | |
| @param[in] Src Pointer to the Source data to be copied. | |
| @return The strcpy function returns the value of Dest. | |
| **/ | |
| char *strcpy(char * __restrict Dest, const char * __restrict Src); | |
| /** The strncpy function copies not more than N characters (characters that | |
| follow a null character are not copied) from the array pointed to by Src to | |
| the array pointed to by Dest. If copying takes place between objects that | |
| overlap, the behavior is undefined. | |
| If the array pointed to by Src is a string that is shorter than N | |
| characters, null characters are appended to the copy in the array pointed | |
| to by Dest, until N characters in all have been written. | |
| @param[out] Dest Pointer to the destination of the copy operation. | |
| @param[in] Src Pointer to the Source data to be copied. | |
| @param[in] N Number of characters (bytes) to be copied. | |
| @return The strncpy function returns the value of Dest. | |
| **/ | |
| char *strncpy(char * __restrict Dest, const char * __restrict Src, size_t N); | |
| /** The strncpyX function copies not more than N-1 characters (characters that | |
| follow a null character are not copied) from the array pointed to by Src to | |
| the array pointed to by Dest. Array Dest is guaranteed to be NULL terminated. | |
| If copying takes place between objects that overlap, | |
| the behavior is undefined. | |
| strncpyX exists because normal strncpy does not indicate if the copy was | |
| terminated because of exhausting the buffer or reaching the end of Src. | |
| @param[out] Dest Pointer to the destination of the copy operation. | |
| @param[in] Src Pointer to the Source data to be copied. | |
| @param[in] N Number of characters (bytes) to be copied. | |
| @return The strncpyX function returns 0 if the copy operation was | |
| terminated because it reached the end of Dest. Otherwise, | |
| a non-zero value is returned indicating how many characters | |
| remain in Dest. | |
| **/ | |
| int strncpyX(char * __restrict Dest, const char * __restrict Src, size_t N); | |
| /* ################ Concatenation Functions ########################### */ | |
| /** The strcat function appends a copy of the string pointed to by Src | |
| (including the terminating null character) to the end of the string pointed | |
| to by Dest. The initial character of Src overwrites the null character at the | |
| end of Dest. If copying takes place between objects that overlap, the | |
| behavior is undefined. | |
| @param[out] Dest Pointer to the destination of the concatenation operation. | |
| @param[in] Src Pointer to the Source data to be concatenated. | |
| @return The strcat function returns the value of Dest. | |
| **/ | |
| char *strcat(char * __restrict Dest, const char * __restrict Src); | |
| /** The strncat function appends not more than N characters (a null character | |
| and characters that follow it are not appended) from the array pointed to | |
| by Src to the end of the string pointed to by Dest. The initial character of | |
| Src overwrites the null character at the end of Dest. A terminating null | |
| character is always appended to the result. If copying takes place | |
| between objects that overlap, the behavior is undefined. | |
| @param[out] Dest Pointer to the destination of the concatenation operation. | |
| @param[in] Src Pointer to the Source data to be concatenated. | |
| @param[in] N Max Number of characters (bytes) to be concatenated. | |
| @return The strncat function returns the value of Dest. | |
| **/ | |
| char *strncat(char * __restrict Dest, const char * __restrict Src, size_t N); | |
| /** The strncatX function appends not more than N characters (a null character | |
| and characters that follow it are not appended) from the array pointed to | |
| by Src to the end of the string pointed to by Dest. The initial character of | |
| Src overwrites the null character at the end of Dest. The result is always | |
| terminated with a null character. If copying takes place between objects | |
| that overlap, the behavior is undefined. | |
| strncatX exists because normal strncat does not indicate if the operation | |
| was terminated because of exhausting N or reaching the end of Src. | |
| @param[out] Dest Pointer to the destination of the concatenation operation. | |
| @param[in] Src Pointer to the Source data to be concatenated. | |
| @param[in] N Max Number of characters (bytes) to be concatenated. | |
| @return The strncatX function returns 0 if the operation was terminated | |
| because it reached the end of Dest. Otherwise, a non-zero value is | |
| returned indicating how many characters remain in Dest. | |
| **/ | |
| int strncatX(char * __restrict s1, const char * __restrict s2, size_t n); | |
| /* ################ Comparison Functions ############################## */ | |
| /** The memcmp function compares the first N characters of the object pointed | |
| to by S1 to the first N characters of the object pointed to by S2. | |
| @param[out] S1 Pointer to the first object to be compared. | |
| @param[in] S2 Pointer to the object to be compared to S1. | |
| @param[in] N Max Number of characters (bytes) to be compared. | |
| @return The memcmp function returns an integer greater than, equal to, or | |
| less than zero, accordingly as the object pointed to by S1 is | |
| greater than, equal to, or less than the object pointed to by S2. | |
| **/ | |
| int memcmp(const void *S1, const void *S2, size_t N); | |
| /** The strcmp function compares the string pointed to by S1 to the string | |
| pointed to by S2. | |
| @param[out] S1 Pointer to the first string to be compared. | |
| @param[in] S2 Pointer to the string to be compared to S1. | |
| @return The strcmp function returns an integer greater than, equal to, or | |
| less than zero, accordingly as the string pointed to by S1 is | |
| greater than, equal to, or less than the string pointed to by S2. | |
| **/ | |
| int strcmp(const char *S1, const char *S2); | |
| /** The strcoll function compares the string pointed to by S1 to the string | |
| pointed to by S2, both interpreted as appropriate to the LC_COLLATE | |
| category of the current locale. | |
| @param[out] S1 Pointer to the first string to be compared. | |
| @param[in] S2 Pointer to the string to be compared to S1. | |
| @return The strcoll function returns an integer greater than, equal to, | |
| or less than zero, accordingly as the string pointed to by S1 is | |
| greater than, equal to, or less than the string pointed to by S2 | |
| when both are interpreted as appropriate to the current locale. | |
| **/ | |
| int strcoll(const char *S1, const char *S2); | |
| /** The strncmp function compares not more than N characters (characters that | |
| follow a null character are not compared) from the array pointed to by S1 | |
| to the array pointed to by S2. | |
| @param[out] S1 Pointer to the first object to be compared. | |
| @param[in] S2 Pointer to the object to be compared to S1. | |
| @param[in] N Max Number of characters (bytes) to be compared. | |
| @return The strncmp function returns an integer greater than, equal to, | |
| or less than zero, accordingly as the possibly null-terminated | |
| array pointed to by S1 is greater than, equal to, or less than | |
| the possibly null-terminated array pointed to by S2. | |
| **/ | |
| int strncmp(const char *S1, const char *S2, size_t N); | |
| /** The strxfrm function transforms the string pointed to by Src and places the | |
| resulting string into the array pointed to by Dest. The transformation is | |
| such that if the strcmp function is applied to two transformed strings, it | |
| returns a value greater than, equal to, or less than zero, corresponding to | |
| the result of the strcoll function applied to the same two original | |
| strings. No more than N characters are placed into the resulting array | |
| pointed to by Dest, including the terminating null character. If N is zero, | |
| Dest is permitted to be a null pointer. If copying takes place between | |
| objects that overlap, the behavior is undefined. | |
| @param[out] Dest Pointer to the object to receive the transformed string. | |
| @param[in] Src Pointer to the string to be transformed. | |
| @param[in] N Max Number of characters (bytes) to be transformed. | |
| @return The strxfrm function returns the length of the transformed string | |
| (not including the terminating null character). If the value | |
| returned is N or more, the contents of the array pointed to by Dest | |
| are indeterminate. | |
| **/ | |
| size_t strxfrm(char * __restrict Dest, const char * __restrict Src, size_t N); | |
| /* ################ Search Functions ################################## */ | |
| /** The memchr function locates the first occurrence of C (converted to an | |
| unsigned char) in the initial N characters (each interpreted as | |
| unsigned char) of the object pointed to by S. | |
| @param[in] S Pointer to the object to be searched. | |
| @param[in] C The character value to search for. | |
| @param[in] N Max Number of characters (bytes) to be searched. | |
| @return The memchr function returns a pointer to the located character, | |
| or a null pointer if the character does not occur in the object. | |
| **/ | |
| void *memchr(const void *S, int C, size_t N); | |
| /** The strchr function locates the first occurrence of C (converted to a char) | |
| in the string pointed to by S. The terminating null character is considered | |
| to be part of the string. | |
| @param[in] S Pointer to the object to be searched. | |
| @param[in] C The character value to search for. | |
| @return The strchr function returns a pointer to the located character, | |
| or a null pointer if the character does not occur in the string. | |
| **/ | |
| char *strchr(const char *S, int C); | |
| /** The strcspn function computes the length of the maximum initial segment of | |
| the string pointed to by S1 which consists entirely of characters NOT from | |
| the string pointed to by S2. | |
| @param[in] S1 Pointer to the object to be searched. | |
| @param[in] S2 Pointer to the list of characters to search for. | |
| @return The strcspn function returns the length of the segment. | |
| **/ | |
| size_t strcspn(const char *S1, const char *S2); | |
| /** The strpbrk function locates the first occurrence in the string pointed to | |
| by S1 of any character from the string pointed to by S2. | |
| @param[in] S1 Pointer to the object to be searched. | |
| @param[in] S2 Pointer to the list of characters to search for. | |
| @return The strpbrk function returns a pointer to the character, or a | |
| null pointer if no character from S2 occurs in S1. | |
| **/ | |
| char *strpbrk(const char *S1, const char *S2); | |
| /** The strrchr function locates the last occurrence of C (converted to a char) | |
| in the string pointed to by S. The terminating null character is considered | |
| to be part of the string. | |
| @param[in] S Pointer to the object to be searched. | |
| @param[in] C The character value to search for. | |
| @return The strrchr function returns a pointer to the character, or a | |
| null pointer if C does not occur in the string. | |
| **/ | |
| char *strrchr(const char *S, int C); | |
| /** The strspn function computes the length of the maximum initial segment of | |
| the string pointed to by S1 which consists entirely of characters from the | |
| string pointed to by S2. | |
| @param[in] S1 Pointer to the object to be searched. | |
| @param[in] S2 Pointer to the list of characters to search for. | |
| @return The strspn function returns the length of the segment. | |
| **/ | |
| size_t strspn(const char *S1 , const char *S2); | |
| /** The strstr function locates the first occurrence in the string pointed to | |
| by S1 of the sequence of characters (excluding the terminating null | |
| character) in the string pointed to by S2. | |
| @param[in] S1 Pointer to the object to be searched. | |
| @param[in] S2 Pointer to the sequence of characters to search for. | |
| @return The strstr function returns a pointer to the located string, or a | |
| null pointer if the string is not found. If S2 points to a string | |
| with zero length, the function returns S1. | |
| **/ | |
| char *strstr(const char *S1 , const char *S2); | |
| /** Break a string into a sequence of tokens. | |
| A sequence of calls to the strtok function breaks the string pointed to by | |
| S1 into a sequence of tokens, each of which is delimited by a character | |
| from the string pointed to by S2. The first call in the sequence has a | |
| non-null first argument; subsequent calls in the sequence have a null first | |
| argument. The separator string pointed to by S2 may be different from call | |
| to call. | |
| The first call in the sequence searches the string pointed to by S1 for the | |
| first character that is not contained in the current separator string | |
| pointed to by S2. If no such character is found, then there are no tokens | |
| in the string pointed to by S1 and the strtok function returns a null | |
| pointer. If such a character is found, it is the start of the first token. | |
| The strtok function then searches from there for a character that is | |
| contained in the current separator string. If no such character is found, | |
| the current token extends to the end of the string pointed to by S1, and | |
| subsequent searches for a token will return a null pointer. If such a | |
| character is found, it is overwritten by a null character, which terminates | |
| the current token. The strtok function saves a pointer to the following | |
| character, from which the next search for a token will start. | |
| Each subsequent call, with a null pointer as the value of the first | |
| argument, starts searching from the saved pointer and behaves as | |
| described above. | |
| @param[in] S1 Pointer to the string to be tokenized. | |
| @param[in] S2 Pointer to a list of separator characters. | |
| @return The strtok function returns a pointer to the first character of a | |
| token, or a null pointer if there is no token. | |
| **/ | |
| char *strtok(char * __restrict S1, const char * __restrict S2); | |
| /* ################ Miscellaneous Functions ########################### */ | |
| /** The memset function copies the value of C (converted to an unsigned char) | |
| into each of the first N characters of the object pointed to by S. | |
| @param[out] S Pointer to the first element of the object to be set. | |
| @param[in] C Value to store in each element of S. | |
| @param[in] N Number of elements in S to be set. | |
| @return The memset function returns the value of S. | |
| **/ | |
| void *memset(void *S, int C, size_t N); | |
| /** The strerror function maps the number in Num to a message string. | |
| Typically, the values for Num come from errno, but strerror shall map | |
| any value of type int to a message. | |
| @param[in] Num A value to be converted to a message. | |
| @return The strerror function returns a pointer to the string, the | |
| contents of which are locale specific. The array pointed to | |
| must not be modified by the program, but may be overwritten by | |
| a subsequent call to the strerror function. | |
| **/ | |
| char *strerror(int Num); | |
| /** The strlen function computes the length of the string pointed to by S. | |
| @param[in] S Pointer to the string to determine the length of. | |
| @return The strlen function returns the number of characters that | |
| precede the terminating null character. | |
| **/ | |
| size_t strlen(const char *S); | |
| /* ################ BSD Compatibility Functions ####################### */ | |
| char *strdup (const char *); | |
| int strerror_r(int, char *, size_t); | |
| int strcasecmp(const char *s1, const char *s2); | |
| void *memccpy (void *, const void *, int, size_t); | |
| int strncasecmp(const char *s1, const char *s2, size_t n); | |
| size_t strlcpy(char *destination, const char *source, size_t size); | |
| size_t strlcat(char *destination, const char *source, size_t size); | |
| // bcopy is is a void function with the src/dest arguments reversed, being used in socket lib | |
| #define bcopy(a,b,c) ( memcpy((void *)b, (const void *)a, (size_t)c)) | |
| // bcmp is same as memcmp, returns 0 for successful compare, non-zero otherwise | |
| #define bcmp(a,b,c) ( memcmp((void *)a, (void *)b, (size_t)c)) | |
| /* | |
| * Get next token from string *stringp, where tokens are possibly-empty | |
| * strings separated by characters from delim. | |
| * | |
| * Writes NULs into the string at *stringp to end tokens. | |
| * delim need not remain constant from call to call. | |
| * On return, *stringp points past the last NUL written (if there might | |
| * be further tokens), or is NULL (if there are definitely no more tokens). | |
| * | |
| * If *stringp is NULL, strsep returns NULL. | |
| */ | |
| char * | |
| strsep( | |
| register char **stringp, | |
| register const char *delim | |
| ); | |
| __END_DECLS | |
| #endif /* _STRING_H */ |