X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fmem%2Fmem.c;h=91c9961a52ecd92d1372dae98b07f54902e25f22;hb=4ad5144790a12523f8a7c24c469a34907b6942a6;hp=ce675ff0db4238b6840fcdd98bff736ba90b508c;hpb=992931f06cf25d24fe74b4c617753aef2de70426;p=ccan diff --git a/ccan/mem/mem.c b/ccan/mem/mem.c index ce675ff0..91c9961a 100644 --- a/ccan/mem/mem.c +++ b/ccan/mem/mem.c @@ -25,3 +25,42 @@ void *memmem(const void *haystack, size_t haystacklen, return NULL; } #endif + +#if !HAVE_MEMRCHR +void *memrchr(const void *s, int c, size_t n) +{ + unsigned char *p = (unsigned char *)s; + + while (n) { + if (p[n-1] == c) + return p + n - 1; + n--; + } + + return NULL; +} +#endif + +void *mempbrkm(const void *data_, size_t len, const void *accept_, size_t accept_len) +{ + const char *data = data_, *accept = accept_; + size_t i, j; + + for (i = 0; i < len; i++) + for (j = 0; j < accept_len; j++) + if (accept[j] == data[i]) + return (void *)&data[i]; + return NULL; +} + +void *memcchr(void const *data, int c, size_t data_len) +{ + char const *p = data; + size_t i; + + for (i = 0; i < data_len; i++) + if (p[i] != c) + return (void *)&p[i]; + + return NULL; +}