Clib: Add generic strpbrk() and strtok() to improve portability

This patch implements the native string APIs of strpbrk()/strtok().
Unit tests have been done to these two functions in unix environment and no
bugs have been found. Lv Zheng.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
This commit is contained in:
Lv Zheng 2016-05-23 23:06:56 +08:00
parent 452f283aa5
commit 01f6a32f55
2 changed files with 97 additions and 0 deletions

View File

@ -356,6 +356,93 @@ strlen (
}
/*******************************************************************************
*
* FUNCTION: strpbrk
*
* PARAMETERS: String - Null terminated string
* Delimiters - Delimiters to match
*
* RETURN: The first occurance in the string of any of the bytes in the
* delimiters
*
* DESCRIPTION: Search a string for any of a set of the delimiters
*
******************************************************************************/
char *
strpbrk (
const char *String,
const char *Delimiters)
{
const char *Delimiter;
for ( ; *String != '\0'; ++String)
{
for (Delimiter = Delimiters; *Delimiter != '\0'; Delimiter++)
{
if (*String == *Delimiter)
{
return (ACPI_CAST_PTR (char, String));
}
}
}
return (NULL);
}
/*******************************************************************************
*
* FUNCTION: strtok
*
* PARAMETERS: String - Null terminated string
* Delimiters - Delimiters to match
*
* RETURN: Pointer to the next token
*
* DESCRIPTION: Split string into tokens
*
******************************************************************************/
char*
strtok (
char *String,
const char *Delimiters)
{
char *Begin = String;
static char *SavedPtr;
if (Begin == NULL)
{
if (SavedPtr == NULL)
{
return (NULL);
}
Begin = SavedPtr;
}
SavedPtr = strpbrk (Begin, Delimiters);
while (SavedPtr == Begin)
{
*Begin++ = '\0';
SavedPtr = strpbrk (Begin, Delimiters);
}
if (SavedPtr)
{
*SavedPtr++ = '\0';
return (Begin);
}
else
{
return (NULL);
}
}
/*******************************************************************************
*
* FUNCTION: strcpy

View File

@ -175,6 +175,16 @@ strchr (
const char *String,
int ch);
char *
strpbrk (
const char *String,
const char *Delimiters);
char *
strtok (
char *String,
const char *Delimiters);
char *
strcpy (
char *DstString,