[PATCH v2] Modify strnstr.c.
Brian Inglis
Brian.Inglis@SystematicSw.ab.ca
Sun Sep 10 04:27:00 GMT 2017
On 2017-08-29 21:03, Sichen Zhao wrote:
> ---
> newlib/libc/string/strnstr.c | 65 +++++++-------------------------------------
> 1 file changed, 10 insertions(+), 55 deletions(-)
>
> diff --git a/newlib/libc/string/strnstr.c b/newlib/libc/string/strnstr.c
> index da5e5bd..05d86ee 100644
> --- a/newlib/libc/string/strnstr.c
> +++ b/newlib/libc/string/strnstr.c
> @@ -1,42 +1,5 @@
> -/*-
> - * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
> - * Copyright (c) 1990, 1993
> - * The Regents of the University of California. All rights reserved.
> - *
> - * This code is derived from software contributed to Berkeley by
> - * Chris Torek.
> - *
> - * Redistribution and use in source and binary forms, with or without
> - * modification, are permitted provided that the following conditions
> - * are met:
> - * 1. Redistributions of source code must retain the above copyright
> - * notice, this list of conditions and the following disclaimer.
> - * 2. Redistributions in binary form must reproduce the above copyright
> - * notice, this list of conditions and the following disclaimer in the
> - * documentation and/or other materials provided with the distribution.
> - * 3. Neither the name of the University nor the names of its contributors
> - * may be used to endorse or promote products derived from this software
> - * without specific prior written permission.
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
> - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
> - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE.
> - */
> -
> -#if defined(LIBC_SCCS) && !defined(lint)
> -static char sccsid[] = "@(#)strstr.c 8.1 (Berkeley) 6/4/93";
> -#endif /* LIBC_SCCS and not lint */
> -#include <sys/cdefs.h>
> -__FBSDID("$FreeBSD: head/lib/libc/string/strnstr.c 251069 2013-05-28 20:57:40Z emaste $");
> -
> +#undef __STRICT_ANSI__
> +#include <_ansi.h>
> #include <string.h>
>
> /*
> @@ -44,22 +7,14 @@ __FBSDID("$FreeBSD: head/lib/libc/string/strnstr.c 251069 2013-05-28 20:57:40Z e
> * first slen characters of s.
> */
> char *
> -strnstr(const char *s, const char *find, size_t slen)
> +strnstr(const char *haystack, const char *needle, size_t haystack_len)
> {
> - char c, sc;
> - size_t len;
> + size_t needle_len = strnlen(needle, haystack_len);
>
> - if ((c = *find++) != '\0') {
> - len = strlen(find);
> - do {
> - do {
> - if (slen-- < 1 || (sc = *s++) == '\0')
> - return (NULL);
> - } while (sc != c);
> - if (len > slen)
> - return (NULL);
> - } while (strncmp(s, find, len) != 0);
> - s--;
> - }
> - return ((char *)s);
> + if (needle_len < haystack_len || !needle[needle_len]) {
> + char *x = memmem(haystack, haystack_len, needle, needle_len);
> + if (x && !memchr(haystack, 0, x - haystack))
> + return x;
> + }
> + return NULL;
> }
Getting memmem undefined building Cygwin from git latest.
--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada
--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada
More information about the Newlib
mailing list