mirror of
https://github.com/reactos/reactos.git
synced 2025-06-20 07:36:05 +00:00
Create a branch for header work.
svn path=/branches/header-work/; revision=45691
This commit is contained in:
parent
14fe274b1c
commit
9ea495ba33
19538 changed files with 0 additions and 1063950 deletions
54
lib/sdk/crt/string/strpbrk.c
Normal file
54
lib/sdk/crt/string/strpbrk.c
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* $Id$
|
||||
*/
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
|
||||
#define BIT_SIZE (CHAR_BIT * sizeof(unsigned long) / sizeof(char))
|
||||
|
||||
char* strpbrk(const char *s1, const char *s2)
|
||||
{
|
||||
if (*s2 == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (*(s2+1) == 0)
|
||||
{
|
||||
return strchr(s1, *s2);
|
||||
}
|
||||
else if (*(s2+2) == 0)
|
||||
{
|
||||
char *s3, *s4;
|
||||
s3 = strchr(s1, *s2);
|
||||
s4 = strchr(s1, *(s2+1));
|
||||
if (s3 == 0)
|
||||
{
|
||||
return s4;
|
||||
}
|
||||
else if (s4 == 0)
|
||||
{
|
||||
return s3;
|
||||
}
|
||||
return s3 < s4 ? s3 : s4;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned long char_map[(1 << CHAR_BIT) / BIT_SIZE] = {0, };
|
||||
const unsigned char* str = (const unsigned char*)s1;
|
||||
while (*s2)
|
||||
{
|
||||
char_map[*(const unsigned char*)s2 / BIT_SIZE] |= (1 << (*(const unsigned char*)s2 % BIT_SIZE));
|
||||
s2++;
|
||||
}
|
||||
while (*str)
|
||||
{
|
||||
if (char_map[*str / BIT_SIZE] & (1 << (*str % BIT_SIZE)))
|
||||
{
|
||||
return (char*)((size_t)str);
|
||||
}
|
||||
str++;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue