1570af302Sopenharmony_ci#ifndef	_STRING_H
2570af302Sopenharmony_ci#define	_STRING_H
3570af302Sopenharmony_ci
4570af302Sopenharmony_ci#ifdef __cplusplus
5570af302Sopenharmony_ciextern "C" {
6570af302Sopenharmony_ci#endif
7570af302Sopenharmony_ci
8570af302Sopenharmony_ci#include <features.h>
9570af302Sopenharmony_ci
10570af302Sopenharmony_ci#if __cplusplus >= 201103L
11570af302Sopenharmony_ci#define NULL nullptr
12570af302Sopenharmony_ci#elif defined(__cplusplus)
13570af302Sopenharmony_ci#define NULL 0L
14570af302Sopenharmony_ci#else
15570af302Sopenharmony_ci#define NULL ((void*)0)
16570af302Sopenharmony_ci#endif
17570af302Sopenharmony_ci
18570af302Sopenharmony_ci#define __NEED_size_t
19570af302Sopenharmony_ci#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
20570af302Sopenharmony_ci || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
21570af302Sopenharmony_ci || defined(_BSD_SOURCE)
22570af302Sopenharmony_ci#define __NEED_locale_t
23570af302Sopenharmony_ci#endif
24570af302Sopenharmony_ci
25570af302Sopenharmony_ci#include <bits/alltypes.h>
26570af302Sopenharmony_ci
27570af302Sopenharmony_civoid *memcpy (void *__restrict, const void *__restrict, size_t);
28570af302Sopenharmony_civoid *memmove (void *, const void *, size_t);
29570af302Sopenharmony_civoid *memset (void *, int, size_t);
30570af302Sopenharmony_ciint memcmp (const void *, const void *, size_t);
31570af302Sopenharmony_civoid *memchr (const void *, int, size_t);
32570af302Sopenharmony_ci
33570af302Sopenharmony_cichar *strcpy (char *__restrict, const char *__restrict);
34570af302Sopenharmony_cichar *strncpy (char *__restrict, const char *__restrict, size_t);
35570af302Sopenharmony_ci
36570af302Sopenharmony_cichar *strcat (char *__restrict, const char *__restrict);
37570af302Sopenharmony_cichar *strncat (char *__restrict, const char *__restrict, size_t);
38570af302Sopenharmony_ci
39570af302Sopenharmony_ciint strcmp (const char *, const char *);
40570af302Sopenharmony_ciint strncmp (const char *, const char *, size_t);
41570af302Sopenharmony_ci
42570af302Sopenharmony_ciint strcoll (const char *, const char *);
43570af302Sopenharmony_cisize_t strxfrm (char *__restrict, const char *__restrict, size_t);
44570af302Sopenharmony_ci
45570af302Sopenharmony_cichar *strchr (const char *, int);
46570af302Sopenharmony_cichar *strrchr (const char *, int);
47570af302Sopenharmony_ci
48570af302Sopenharmony_cisize_t strcspn (const char *, const char *);
49570af302Sopenharmony_cisize_t strspn (const char *, const char *);
50570af302Sopenharmony_cichar *strpbrk (const char *, const char *);
51570af302Sopenharmony_cichar *strstr (const char *, const char *);
52570af302Sopenharmony_cichar *strtok (char *__restrict, const char *__restrict);
53570af302Sopenharmony_ci
54570af302Sopenharmony_cisize_t strlen (const char *);
55570af302Sopenharmony_ci
56570af302Sopenharmony_cichar *strerror (int);
57570af302Sopenharmony_ci
58570af302Sopenharmony_ci#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
59570af302Sopenharmony_ci#include <strings.h>
60570af302Sopenharmony_ci#endif
61570af302Sopenharmony_ci
62570af302Sopenharmony_ci#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
63570af302Sopenharmony_ci || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
64570af302Sopenharmony_ci || defined(_BSD_SOURCE)
65570af302Sopenharmony_cichar *strtok_r (char *__restrict, const char *__restrict, char **__restrict);
66570af302Sopenharmony_ciint strerror_r (int, char *, size_t);
67570af302Sopenharmony_cichar *stpcpy(char *__restrict, const char *__restrict);
68570af302Sopenharmony_cichar *stpncpy(char *__restrict, const char *__restrict, size_t);
69570af302Sopenharmony_cisize_t strnlen (const char *, size_t);
70570af302Sopenharmony_cichar *strdup (const char *);
71570af302Sopenharmony_cichar *strndup (const char *, size_t);
72570af302Sopenharmony_cichar *strsignal(int);
73570af302Sopenharmony_cichar *strerror_l (int, locale_t);
74570af302Sopenharmony_ciint strcoll_l (const char *, const char *, locale_t);
75570af302Sopenharmony_cisize_t strxfrm_l (char *__restrict, const char *__restrict, size_t, locale_t);
76570af302Sopenharmony_ci#endif
77570af302Sopenharmony_ci
78570af302Sopenharmony_ci#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
79570af302Sopenharmony_ci || defined(_BSD_SOURCE)
80570af302Sopenharmony_civoid *memccpy (void *__restrict, const void *__restrict, int, size_t);
81570af302Sopenharmony_ci#endif
82570af302Sopenharmony_ci
83570af302Sopenharmony_ci#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
84570af302Sopenharmony_cichar *strsep(char **, const char *);
85570af302Sopenharmony_cisize_t strlcat (char *, const char *, size_t);
86570af302Sopenharmony_cisize_t strlcpy (char *, const char *, size_t);
87570af302Sopenharmony_civoid explicit_bzero (void *, size_t);
88570af302Sopenharmony_ci#endif
89570af302Sopenharmony_ci
90570af302Sopenharmony_ci#ifdef _GNU_SOURCE
91570af302Sopenharmony_ci#define	strdupa(x)	strcpy(alloca(strlen(x)+1),x)
92570af302Sopenharmony_ciint strverscmp (const char *, const char *);
93570af302Sopenharmony_cichar *strchrnul(const char *, int);
94570af302Sopenharmony_cichar *strcasestr(const char *, const char *);
95570af302Sopenharmony_civoid *memmem(const void *, size_t, const void *, size_t);
96570af302Sopenharmony_civoid *memrchr(const void *, int, size_t);
97570af302Sopenharmony_civoid *mempcpy(void *, const void *, size_t);
98570af302Sopenharmony_ci#ifndef __cplusplus
99570af302Sopenharmony_cichar *basename();
100570af302Sopenharmony_ci#endif
101570af302Sopenharmony_ci#endif
102570af302Sopenharmony_ci
103570af302Sopenharmony_ci#include <fortify/string.h>
104570af302Sopenharmony_ci
105570af302Sopenharmony_ci#ifdef __cplusplus
106570af302Sopenharmony_ci}
107570af302Sopenharmony_ci#endif
108570af302Sopenharmony_ci
109570af302Sopenharmony_ci#endif
110