Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add strnstr compat function.
Vsevolod Stakhov committed 11 years ago
commit 716b3e55a0e54cc273bf672d16062a177f5d72be
parent 12db7c6
4 files changed +68 -1
modified compat/Makefile.am
@@ -8,6 +8,7 @@ libbsd_compat_la_SOURCES= basename.c \
				file_at.c \
				gr_util.c \
				humanize_number.c \
-
				strtonum.c
+
				strtonum.c \
+
				strnstr.c

libbsd_compat_la_CFLAGS=	$(pkg_common_cflags) -shared
modified compat/bsd_compat.h
@@ -90,6 +90,10 @@ int unlinkat(int fd, const char *path, int flag);
long long strtonum(const char *, long long, long long, const char **);
#endif

+
#if !HAVE_STRNSTR
+
char * strnstr(const char *s, const char *find, size_t slen);
+
#endif
+

#ifndef _PATH_GROUP
#define _PATH_GROUP "/etc/group"
#endif
added compat/strnstr.c
@@ -0,0 +1,61 @@
+
/*-
+
 * 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.
+
 */
+

+
#include <sys/cdefs.h>
+
#include <string.h>
+

+
/*
+
 * Find the first occurrence of find in s, where the search is limited to the
+
 * first slen characters of s.
+
 */
+
char *
+
strnstr(const char *s, const char *find, size_t slen)
+
{
+
        char c, sc;
+
        size_t 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);
+
}
+

modified configure.ac
@@ -121,6 +121,7 @@ AC_CHECK_FUNCS_ONCE([localtime_r])
AC_CHECK_FUNCS_ONCE([gmtime_r])
AC_CHECK_FUNCS_ONCE([strerror_r])
AC_CHECK_FUNCS_ONCE([strtonum])
+
AC_CHECK_FUNCS_ONCE([strnstr])
AC_CHECK_DECLS(
	[[fstatat], [openat], [unlinkat], [readlinkat], [faccessat]],
	[], [], [