UACME/Source/Shared/_strstri.c

88 lines
1.2 KiB
C

#include "rtltypes.h"
char *_strstri_a(const char *s, const char *sub_s)
{
char c0, c1, c2, *tmps, *tmpsub;
if (s == sub_s)
return (char *)s;
if (s == 0)
return 0;
if (sub_s == 0)
return 0;
c0 = locase_a(*sub_s);
while (c0 != 0) {
while (*s != 0) {
c2 = locase_a(*s);
if (c2 == c0)
break;
s++;
}
if (*s == 0)
return 0;
tmps = (char *)s;
tmpsub = (char *)sub_s;
do {
c1 = locase_a(*tmps);
c2 = locase_a(*tmpsub);
tmps++;
tmpsub++;
} while ((c1 == c2) && (c2 != 0));
if (c2 == 0)
return (char *)s;
s++;
}
return 0;
}
wchar_t *_strstri_w(const wchar_t *s, const wchar_t *sub_s)
{
wchar_t c0, c1, c2, *tmps, *tmpsub;
if (s == sub_s)
return (wchar_t *)s;
if (s == 0)
return 0;
if (sub_s == 0)
return 0;
c0 = locase_w(*sub_s);
while (c0 != 0) {
while (*s != 0) {
c2 = locase_w(*s);
if (c2 == c0)
break;
s++;
}
if (*s == 0)
return 0;
tmps = (wchar_t *)s;
tmpsub = (wchar_t *)sub_s;
do {
c1 = locase_w(*tmps);
c2 = locase_w(*tmpsub);
tmps++;
tmpsub++;
} while ((c1 == c2) && (c2 != 0));
if (c2 == 0)
return (wchar_t *)s;
s++;
}
return 0;
}