mirror of
https://github.com/acpica/acpica/
synced 2025-02-26 02:14:33 +03:00
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:
parent
452f283aa5
commit
01f6a32f55
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user