xref: /netbsd-src/include/string.h (revision 2db69065917f14f1b3da7a3fa14f2d3ee8d7b04b)
1*2db69065Snros /*	$NetBSD: string.h,v 1.58 2024/12/09 12:09:02 nros Exp $	*/
24d2cbfceScgd 
361f28255Scgd /*-
4b7b7322cSperry  * Copyright (c) 1990, 1993
5b7b7322cSperry  *	The Regents of the University of California.  All rights reserved.
661f28255Scgd  *
761f28255Scgd  * Redistribution and use in source and binary forms, with or without
861f28255Scgd  * modification, are permitted provided that the following conditions
961f28255Scgd  * are met:
1061f28255Scgd  * 1. Redistributions of source code must retain the above copyright
1161f28255Scgd  *    notice, this list of conditions and the following disclaimer.
1261f28255Scgd  * 2. Redistributions in binary form must reproduce the above copyright
1361f28255Scgd  *    notice, this list of conditions and the following disclaimer in the
1461f28255Scgd  *    documentation and/or other materials provided with the distribution.
15039cc956Sagc  * 3. Neither the name of the University nor the names of its contributors
1661f28255Scgd  *    may be used to endorse or promote products derived from this software
1761f28255Scgd  *    without specific prior written permission.
1861f28255Scgd  *
1961f28255Scgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2061f28255Scgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2161f28255Scgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2261f28255Scgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2361f28255Scgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2461f28255Scgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2561f28255Scgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2661f28255Scgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2761f28255Scgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2861f28255Scgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2961f28255Scgd  * SUCH DAMAGE.
3061f28255Scgd  *
31b7b7322cSperry  *	@(#)string.h	8.1 (Berkeley) 6/2/93
3261f28255Scgd  */
3361f28255Scgd 
3461f28255Scgd #ifndef _STRING_H_
3561f28255Scgd #define	_STRING_H_
3661f28255Scgd #include <machine/ansi.h>
3761f28255Scgd 
382922de74Scgd #ifdef	_BSD_SIZE_T_
392922de74Scgd typedef	_BSD_SIZE_T_	size_t;
402922de74Scgd #undef	_BSD_SIZE_T_
4161f28255Scgd #endif
4261f28255Scgd 
431bba558eSkleink #include <sys/null.h>
4461f28255Scgd 
4561f28255Scgd #include <sys/cdefs.h>
46d7d500efSperry #include <sys/featuretest.h>
4761f28255Scgd 
482dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
492dd10e69Sriastradh #  ifndef __LOCALE_T_DECLARED
502dd10e69Sriastradh typedef struct _locale		*locale_t;
512dd10e69Sriastradh #  define __LOCALE_T_DECLARED
522dd10e69Sriastradh #  endif
532dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
542dd10e69Sriastradh 
5561f28255Scgd __BEGIN_DECLS
56*2db69065Snros #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) || \
57*2db69065Snros     (__STDC_VERSION__ - 0 >= 202311L) || defined(_ISOC23_SOURCE)
582dd10e69Sriastradh void	*memccpy(void *, const void *, int, size_t);
59*2db69065Snros #endif /* _XOPEN_SOURCE || _NETBSD_SOURCE || _ISOC23_SOURCE */
6019b7469aSperry void	*memchr(const void *, int, size_t);
6119b7469aSperry int	 memcmp(const void *, const void *, size_t);
6219b7469aSperry void	*memcpy(void * __restrict, const void * __restrict, size_t);
632dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0 >= 202405L) || defined(_NETBSD_SOURCE)
642dd10e69Sriastradh void	*memmem(const void *, size_t, const void *, size_t);
652dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
6619b7469aSperry void	*memmove(void *, const void *, size_t);
6719b7469aSperry void	*memset(void *, int, size_t);
68b7152c32Sriastradh #if (__STDC_VERSION__ - 0 >= 202311L) || defined(_ISOC23_SOURCE) || \
69b7152c32Sriastradh     defined(_NETBSD_SOURCE)
70b7152c32Sriastradh void	*memset_explicit(void *, int, size_t);
71b7152c32Sriastradh #endif
722dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_NETBSD_SOURCE)
732dd10e69Sriastradh char	*stpcpy(char * __restrict, const char * __restrict);
742dd10e69Sriastradh char	*stpncpy(char * __restrict, const char * __restrict, size_t);
752dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
7619b7469aSperry char	*strcat(char * __restrict, const char * __restrict);
7719b7469aSperry char	*strchr(const char *, int);
7819b7469aSperry int	 strcmp(const char *, const char *);
7919b7469aSperry int	 strcoll(const char *, const char *);
802dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
812dd10e69Sriastradh int	 strcoll_l(const char *, const char *, locale_t);
822dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
8319b7469aSperry char	*strcpy(char * __restrict, const char * __restrict);
8419b7469aSperry size_t	 strcspn(const char *, const char *);
852dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_XOPEN_SOURCE) || \
86*2db69065Snros     defined(_NETBSD_SOURCE) || (__STDC_VERSION__ - 0 >= 202311L) || \
87*2db69065Snros     defined(_ISOC23_SOURCE)
882dd10e69Sriastradh char	*strdup(const char *);
89*2db69065Snros #endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE ||
90*2db69065Snros         * _ISOC23_SOURCE
91*2db69065Snros         */
9219b7469aSperry __aconst char *strerror(int);
932dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
942dd10e69Sriastradh __aconst char *strerror_l(int, locale_t);
952dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
962dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0 >= 200112L) || \
972dd10e69Sriastradh     defined(_REENTRANT) || defined(_NETBSD_SOURCE)
982dd10e69Sriastradh int	 strerror_r(int, char *, size_t);
992dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _REENTRANT || _NETBSD_SOURCE */
1002dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0 >= 202405L) || defined(_NETBSD_SOURCE)
1012dd10e69Sriastradh size_t	 strlcat(char * __restrict, const char * __restrict, size_t);
1022dd10e69Sriastradh size_t	 strlcpy(char * __restrict, const char * __restrict, size_t);
1032dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
10419b7469aSperry size_t	 strlen(const char *);
10519b7469aSperry char	*strncat(char * __restrict, const char * __restrict, size_t);
10619b7469aSperry int	 strncmp(const char *, const char *, size_t);
10719b7469aSperry char	*strncpy(char * __restrict, const char * __restrict, size_t);
108*2db69065Snros #if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_NETBSD_SOURCE) || \
109*2db69065Snros     (__STDC_VERSION__ - 0 >= 202311L) || defined(_ISOC23_SOURCE)
1102a4b16eaSleot char	*strndup(const char *, size_t);
111*2db69065Snros #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE || _ISOC23_SOURCE */
112*2db69065Snros #if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_NETBSD_SOURCE)
113bdb0c5fbSperry size_t	strnlen(const char *, size_t);
1142dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
1152dd10e69Sriastradh char	*strpbrk(const char *, const char *);
1162dd10e69Sriastradh char	*strrchr(const char *, int);
1172dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0 >= 200809L) || defined(_NETBSD_SOURCE)
1189be46036Skleink #ifndef __STRSIGNAL_DECLARED
1199be46036Skleink #define __STRSIGNAL_DECLARED
1209be46036Skleink /* also in unistd.h */
1219be46036Skleink __aconst char *strsignal(int);
1229be46036Skleink #endif /* __STRSIGNAL_DECLARED */
123bdb0c5fbSperry #endif
1242dd10e69Sriastradh size_t	 strspn(const char *, const char *);
1252dd10e69Sriastradh char	*strstr(const char *, const char *);
1262dd10e69Sriastradh char	*strtok(char * __restrict, const char * __restrict);
1272dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0 >= 200112L) || \
1282dd10e69Sriastradh     defined(_REENTRANT) || defined(_NETBSD_SOURCE)
1292dd10e69Sriastradh char	*strtok_r(char *, const char *, char **);
1302dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _REENTRANT || _NETBSD_SOURCE */
1312dd10e69Sriastradh size_t	 strxfrm(char * __restrict, const char * __restrict, size_t);
1322dd10e69Sriastradh #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE)
1332dd10e69Sriastradh size_t	 strxfrm_l(char * __restrict, const char * __restrict, size_t,
1342dd10e69Sriastradh 	    locale_t);
1352dd10e69Sriastradh #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */
1362839b8fcSjoerg __END_DECLS
137bdb0c5fbSperry 
138e2347743Schristos #if defined(_NETBSD_SOURCE)
1396584ea56Sandvar #include <strings.h>		/* for backwards-compatibility */
1402839b8fcSjoerg __BEGIN_DECLS
14119b7469aSperry char	*strcasestr(const char *, const char *);
14212b4355eSchristos char	*strchrnul(const char *, int);
14319b7469aSperry char	*strsep(char **, const char *);
144f4254d2cSchristos char	*stresep(char **, const char *, int);
145155fdf39Schristos char	*strnstr(const char *, const char *, size_t);
14684e3ca2dSchristos void	*memrchr(const void *, int, size_t);
147b515b595Schristos void	*mempcpy(void * __restrict, const void * __restrict, size_t);
1481239c2bbSriastradh void	*explicit_memset(void *, int, size_t);
1491239c2bbSriastradh int	consttime_memequal(const void *, const void *, size_t);
15061f28255Scgd __END_DECLS
1512dd10e69Sriastradh #endif /* _NETBSD_SOURCE */
152e81d3f1eSjoerg 
1531ef79ebcSkristerw #if _FORTIFY_SOURCE > 0
154dc99372bStls #include <ssp/string.h>
1551ef79ebcSkristerw #endif
156ea1a5dbdSkleink #endif /* !defined(_STRING_H_) */
157