27 lines
840 B
C
27 lines
840 B
C
#ifndef COSMOPOLITAN_LIBC_STR_TINYSTRSTR_H_
|
|
#define COSMOPOLITAN_LIBC_STR_TINYSTRSTR_H_
|
|
#ifndef __STRICT_ANSI__
|
|
#include "libc/str/str.h"
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
|
|
forceinline void *tinymemmemi(const void *haystk, size_t haystksize,
|
|
const void *needle, size_t needlesize) {
|
|
const char *p = (const char *)haystk;
|
|
const char *pe = (const char *)haystk + haystksize;
|
|
while (p < pe) {
|
|
size_t i = 0;
|
|
++p;
|
|
for (;;) {
|
|
++i;
|
|
if (i > needlesize) return (/*unconst*/ char *)(p - 1);
|
|
if (p == pe) break;
|
|
if (((const char *)needle)[i - 1] != (p - 1)[i - 1]) break;
|
|
}
|
|
}
|
|
return (/*unconst*/ char *)(!haystksize && !needlesize ? haystk : NULL);
|
|
}
|
|
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* !ANSI */
|
|
#endif /* COSMOPOLITAN_LIBC_STR_TINYMEMMEM_H_ */
|