29 #if !defined(HAVE_MEMRCHR) || defined(UNITTESTS)
30 static void *SCMemrchrFallback(
const void *s,
int c,
size_t n)
32 const unsigned char *
p = (
const unsigned char *)s + n;
33 const unsigned char uc = (
unsigned char)c;
35 while (
p > (
const unsigned char *)s) {
45 void *
memrchr(
const void *s,
int c,
size_t n)
47 return SCMemrchrFallback(s, c, n);
52 static int MemrchrTest01 (
void)
54 char buf[] = {
'x',
'y',
'z' };
55 char one_byte[] = {
'q' };
56 char dup[] = {
'a',
'b',
'a' };
57 unsigned char high_byte[] = { 0x80,
'x', 0x80 };
59 FAIL_IF(SCMemrchrFallback(buf,
'x',
sizeof(buf)) != &buf[0]);
60 FAIL_IF(SCMemrchrFallback(buf,
'z',
sizeof(buf)) != &buf[2]);
61 FAIL_IF(SCMemrchrFallback(buf,
'y',
sizeof(buf)) != &buf[1]);
62 FAIL_IF(SCMemrchrFallback(buf,
'a',
sizeof(buf)) != NULL);
63 FAIL_IF(SCMemrchrFallback(one_byte,
'q',
sizeof(one_byte)) != &one_byte[0]);
64 FAIL_IF(SCMemrchrFallback(one_byte,
'q', 0) != NULL);
65 FAIL_IF(SCMemrchrFallback(dup,
'a',
sizeof(dup)) != &dup[2]);
66 FAIL_IF(SCMemrchrFallback(high_byte, 0x80,
sizeof(high_byte)) != &high_byte[2]);