scc

simple C compiler
git clone git://git.2f30.org/scc
Log | Files | Refs | README | LICENSE

commit 494bd039510a349f198a1cd310b8e36ed8ddce09
parent 801803b4a94822bc1a1f4d69b797f312519dfdfd
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Thu, 23 Feb 2017 15:16:38 +0100

[libc] Add strstr()

Diffstat:
libc/src/Makefile | 2+-
libc/src/strstr.c | 27+++++++++++++++++++++++++++
2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/libc/src/Makefile b/libc/src/Makefile @@ -3,7 +3,7 @@ LIBCOBJ = assert.o strcpy.o strcmp.o strlen.o strchr.o \ strrchr.o strcat.o strncmp.o strncpy.o strncat.o strcoll.o \ - strxfrm.o strtok.o \ + strxfrm.o strtok.o strstr.o \ memset.o memcpy.o memmove.o memcmp.o memchr.o \ isalnum.o isalpha.o isascii.o isblank.o iscntrl.o isdigit.o \ isgraph.o islower.o isprint.o ispunct.o isspace.o isupper.o \ diff --git a/libc/src/strstr.c b/libc/src/strstr.c @@ -0,0 +1,27 @@ +/* See LICENSE file for copyright and license details. */ + +#include <string.h> + +char * +strstr(const char *s1, const char *s2) +{ + const char *p, *q; + int c; + + c = *s2++; + if (c == '\0') + return (char *) s1; + + while (*s1) { + if (*s1 != c) { + ++s1; + } else { + p = s1++; + for (q = s2; *q && *s1 == *q; ++s1, ++q) + /* nothing */; + if (*q == '\0') + return (char *) p; + } + } + return NULL; +}