]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/uclibc/lib/contrib/uclibc/libc/string/memmem.c
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / libc / string / memmem.c
1 /*
2  * Copyright (C) 2002     Manuel Novoa III
3  * Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
4  *
5  * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
6  */
7
8 #include "_string.h"
9
10 #ifdef __USE_GNU
11 void *memmem(const void *haystack, size_t haystacklen,
12                      const void *needle, size_t needlelen)
13 {
14         register const char *ph;
15         register const char *pn;
16         const char *plast;
17         size_t n;
18
19         if (needlelen == 0) {
20                 return (void *) haystack;
21         }
22
23         if (haystacklen >= needlelen) {
24                 ph = (const char *) haystack;
25                 pn = (const char *) needle;
26                 plast = ph + (haystacklen - needlelen);
27
28                 do {
29                         n = 0;
30                         while (ph[n] == pn[n]) {
31                                 if (++n == needlelen) {
32                                         return (void *) ph;
33                                 }
34                         }
35                 } while (++ph <= plast);
36         }
37
38         return NULL;
39 }
40 #endif