master
  1/* Checking macros for wchar functions.  Declarations only.
  2   Copyright (C) 2004-2025 Free Software Foundation, Inc.
  3   This file is part of the GNU C Library.
  4
  5   The GNU C Library is free software; you can redistribute it and/or
  6   modify it under the terms of the GNU Lesser General Public
  7   License as published by the Free Software Foundation; either
  8   version 2.1 of the License, or (at your option) any later version.
  9
 10   The GNU C Library is distributed in the hope that it will be useful,
 11   but WITHOUT ANY WARRANTY; without even the implied warranty of
 12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 13   Lesser General Public License for more details.
 14
 15   You should have received a copy of the GNU Lesser General Public
 16   License along with the GNU C Library; if not, see
 17   <https://www.gnu.org/licenses/>.  */
 18
 19#ifndef _BITS_WCHAR2_DECL_H
 20#define _BITS_WCHAR2_DECL_H 1
 21
 22#ifndef _WCHAR_H
 23# error "Never include <bits/wchar2-decl.h> directly; use <wchar.h> instead."
 24#endif
 25
 26
 27extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
 28			       const wchar_t *__restrict __s2, size_t __n,
 29			       size_t __ns1) __THROW;
 30extern wchar_t *__REDIRECT_NTH (__wmemcpy_alias,
 31				(wchar_t *__restrict __s1,
 32				 const wchar_t *__restrict __s2, size_t __n),
 33				wmemcpy);
 34extern wchar_t *__REDIRECT_NTH (__wmemcpy_chk_warn,
 35				(wchar_t *__restrict __s1,
 36				 const wchar_t *__restrict __s2, size_t __n,
 37				 size_t __ns1), __wmemcpy_chk)
 38     __warnattr ("wmemcpy called with length bigger than size of destination "
 39		 "buffer");
 40
 41extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2,
 42				size_t __n, size_t __ns1) __THROW;
 43extern wchar_t *__REDIRECT_NTH (__wmemmove_alias, (wchar_t *__s1,
 44						   const wchar_t *__s2,
 45						   size_t __n), wmemmove);
 46extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn,
 47				(wchar_t *__s1, const wchar_t *__s2,
 48				 size_t __n, size_t __ns1), __wmemmove_chk)
 49     __warnattr ("wmemmove called with length bigger than size of destination "
 50		 "buffer");
 51
 52
 53#ifdef __USE_GNU
 54
 55extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
 56				const wchar_t *__restrict __s2, size_t __n,
 57				size_t __ns1) __THROW;
 58extern wchar_t *__REDIRECT_NTH (__wmempcpy_alias,
 59				(wchar_t *__restrict __s1,
 60				 const wchar_t *__restrict __s2,
 61				 size_t __n), wmempcpy);
 62extern wchar_t *__REDIRECT_NTH (__wmempcpy_chk_warn,
 63				(wchar_t *__restrict __s1,
 64				 const wchar_t *__restrict __s2, size_t __n,
 65				 size_t __ns1), __wmempcpy_chk)
 66     __warnattr ("wmempcpy called with length bigger than size of destination "
 67		 "buffer");
 68
 69#endif
 70
 71
 72extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n,
 73			       size_t __ns) __THROW;
 74extern wchar_t *__REDIRECT_FORTIFY_NTH (__wmemset_alias, (wchar_t *__s, wchar_t __c,
 75							  size_t __n), wmemset);
 76extern wchar_t *__REDIRECT_NTH (__wmemset_chk_warn,
 77				(wchar_t *__s, wchar_t __c, size_t __n,
 78				 size_t __ns), __wmemset_chk)
 79     __warnattr ("wmemset called with length bigger than size of destination "
 80		 "buffer");
 81
 82extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
 83			      const wchar_t *__restrict __src,
 84			      size_t __n) __THROW;
 85extern wchar_t *__REDIRECT_NTH (__wcscpy_alias,
 86				(wchar_t *__restrict __dest,
 87				 const wchar_t *__restrict __src), wcscpy);
 88
 89extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
 90			      const wchar_t *__restrict __src,
 91			      size_t __destlen) __THROW;
 92extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias,
 93				(wchar_t *__restrict __dest,
 94				 const wchar_t *__restrict __src), wcpcpy);
 95
 96extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
 97			       const wchar_t *__restrict __src, size_t __n,
 98			       size_t __destlen) __THROW;
 99extern wchar_t *__REDIRECT_NTH (__wcsncpy_alias,
100				(wchar_t *__restrict __dest,
101				 const wchar_t *__restrict __src,
102				 size_t __n), wcsncpy);
103extern wchar_t *__REDIRECT_NTH (__wcsncpy_chk_warn,
104				(wchar_t *__restrict __dest,
105				 const wchar_t *__restrict __src,
106				 size_t __n, size_t __destlen), __wcsncpy_chk)
107     __warnattr ("wcsncpy called with length bigger than size of destination "
108		 "buffer");
109
110extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
111			       const wchar_t *__restrict __src, size_t __n,
112			       size_t __destlen) __THROW;
113
114extern wchar_t *__REDIRECT_NTH (__wcpncpy_alias,
115				(wchar_t *__restrict __dest,
116				 const wchar_t *__restrict __src,
117				 size_t __n), wcpncpy);
118extern wchar_t *__REDIRECT_NTH (__wcpncpy_chk_warn,
119				(wchar_t *__restrict __dest,
120				 const wchar_t *__restrict __src,
121				 size_t __n, size_t __destlen), __wcpncpy_chk)
122     __warnattr ("wcpncpy called with length bigger than size of destination "
123		 "buffer");
124
125extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
126			      const wchar_t *__restrict __src,
127			      size_t __destlen) __THROW;
128extern wchar_t *__REDIRECT_NTH (__wcscat_alias,
129				(wchar_t *__restrict __dest,
130				 const wchar_t *__restrict __src), wcscat);
131
132extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
133			       const wchar_t *__restrict __src,
134			       size_t __n, size_t __destlen) __THROW;
135extern wchar_t *__REDIRECT_NTH (__wcsncat_alias,
136				(wchar_t *__restrict __dest,
137				 const wchar_t *__restrict __src,
138				 size_t __n), wcsncat);
139
140extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
141			   int __flag, size_t __s_len,
142			   const wchar_t *__restrict __format, ...)
143     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */;
144extern int __REDIRECT_NTH_LDBL (__swprintf_alias,
145				(wchar_t *__restrict __s, size_t __n,
146				 const wchar_t *__restrict __fmt, ...),
147				swprintf);
148
149extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
150			    int __flag, size_t __s_len,
151			    const wchar_t *__restrict __format,
152			    __gnuc_va_list __arg)
153     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
154extern int __REDIRECT_NTH_LDBL (__vswprintf_alias,
155				(wchar_t *__restrict __s, size_t __n,
156				 const wchar_t *__restrict __fmt,
157				 __gnuc_va_list __ap), vswprintf);
158
159
160#if __USE_FORTIFY_LEVEL > 1
161
162extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag,
163			   const wchar_t *__restrict __format, ...);
164extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format,
165			  ...);
166extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
167			    const wchar_t *__restrict __format,
168			    __gnuc_va_list __ap);
169extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format,
170			   __gnuc_va_list __ap);
171
172#endif
173
174extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n,
175			      __FILE *__restrict __stream) __wur;
176extern wchar_t *__REDIRECT (__fgetws_alias,
177			    (wchar_t *__restrict __s, int __n,
178			     __FILE *__restrict __stream), fgetws) __wur;
179extern wchar_t *__REDIRECT (__fgetws_chk_warn,
180			    (wchar_t *__restrict __s, size_t __size, int __n,
181			     __FILE *__restrict __stream), __fgetws_chk)
182     __wur __warnattr ("fgetws called with bigger size than length "
183		       "of destination buffer");
184
185#ifdef __USE_GNU
186
187extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size,
188				       int __n, __FILE *__restrict __stream)
189       __wur;
190extern wchar_t *__REDIRECT (__fgetws_unlocked_alias,
191			    (wchar_t *__restrict __s, int __n,
192			     __FILE *__restrict __stream), fgetws_unlocked)
193  __wur;
194extern wchar_t *__REDIRECT (__fgetws_unlocked_chk_warn,
195			    (wchar_t *__restrict __s, size_t __size, int __n,
196			     __FILE *__restrict __stream),
197			    __fgetws_unlocked_chk)
198     __wur __warnattr ("fgetws_unlocked called with bigger size than length "
199		       "of destination buffer");
200
201#endif
202
203extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar,
204			     mbstate_t *__restrict __p,
205			     size_t __buflen) __THROW __wur;
206extern size_t __REDIRECT_FORTIFY_NTH (__wcrtomb_alias,
207				      (char *__restrict __s, wchar_t __wchar,
208				      mbstate_t *__restrict __ps), wcrtomb) __wur;
209
210extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
211			       const char **__restrict __src,
212			       size_t __len, mbstate_t *__restrict __ps,
213			       size_t __dstlen) __THROW;
214extern size_t __REDIRECT_NTH (__mbsrtowcs_alias,
215			      (wchar_t *__restrict __dst,
216			       const char **__restrict __src,
217			       size_t __len, mbstate_t *__restrict __ps),
218			      mbsrtowcs);
219extern size_t __REDIRECT_NTH (__mbsrtowcs_chk_warn,
220			      (wchar_t *__restrict __dst,
221			       const char **__restrict __src,
222			       size_t __len, mbstate_t *__restrict __ps,
223			       size_t __dstlen), __mbsrtowcs_chk)
224     __warnattr ("mbsrtowcs called with dst buffer smaller than len "
225		 "* sizeof (wchar_t)");
226
227extern size_t __wcsrtombs_chk (char *__restrict __dst,
228			       const wchar_t **__restrict __src,
229			       size_t __len, mbstate_t *__restrict __ps,
230			       size_t __dstlen) __THROW;
231extern size_t __REDIRECT_NTH (__wcsrtombs_alias,
232			      (char *__restrict __dst,
233			       const wchar_t **__restrict __src,
234			       size_t __len, mbstate_t *__restrict __ps),
235			      wcsrtombs);
236extern size_t __REDIRECT_NTH (__wcsrtombs_chk_warn,
237			      (char *__restrict __dst,
238			       const wchar_t **__restrict __src,
239			       size_t __len, mbstate_t *__restrict __ps,
240			       size_t __dstlen), __wcsrtombs_chk)
241    __warnattr ("wcsrtombs called with dst buffer smaller than len");
242
243#ifdef	__USE_XOPEN2K8
244
245extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
246				const char **__restrict __src, size_t __nmc,
247				size_t __len, mbstate_t *__restrict __ps,
248				size_t __dstlen) __THROW;
249extern size_t __REDIRECT_NTH (__mbsnrtowcs_alias,
250			      (wchar_t *__restrict __dst,
251			       const char **__restrict __src, size_t __nmc,
252			       size_t __len, mbstate_t *__restrict __ps),
253			      mbsnrtowcs);
254extern size_t __REDIRECT_NTH (__mbsnrtowcs_chk_warn,
255			      (wchar_t *__restrict __dst,
256			       const char **__restrict __src, size_t __nmc,
257			       size_t __len, mbstate_t *__restrict __ps,
258			       size_t __dstlen), __mbsnrtowcs_chk)
259     __warnattr ("mbsnrtowcs called with dst buffer smaller than len "
260		 "* sizeof (wchar_t)");
261
262extern size_t __wcsnrtombs_chk (char *__restrict __dst,
263				const wchar_t **__restrict __src,
264				size_t __nwc, size_t __len,
265				mbstate_t *__restrict __ps, size_t __dstlen)
266       __THROW;
267extern size_t __REDIRECT_NTH (__wcsnrtombs_alias,
268			      (char *__restrict __dst,
269			       const wchar_t **__restrict __src,
270			       size_t __nwc, size_t __len,
271			       mbstate_t *__restrict __ps), wcsnrtombs);
272extern size_t __REDIRECT_NTH (__wcsnrtombs_chk_warn,
273			      (char *__restrict __dst,
274			       const wchar_t **__restrict __src,
275			       size_t __nwc, size_t __len,
276			       mbstate_t *__restrict __ps,
277			       size_t __dstlen), __wcsnrtombs_chk)
278     __warnattr ("wcsnrtombs called with dst buffer smaller than len");
279
280#endif
281
282#ifdef __USE_MISC
283extern size_t __wcslcpy_chk (wchar_t *__dest, const wchar_t *__src, size_t __n,
284			     size_t __destlen) __THROW;
285extern size_t __REDIRECT_NTH (__wcslcpy_alias,
286			      (wchar_t *__dest, const wchar_t *__src,
287			       size_t __n), wcslcpy);
288
289extern size_t __wcslcat_chk (wchar_t *__dest, const wchar_t *__src, size_t __n,
290			     size_t __destlen) __THROW;
291extern size_t __REDIRECT_NTH (__wcslcat_alias,
292			      (wchar_t *__dest, const wchar_t *__src,
293			       size_t __n), wcslcat);
294#endif /* __USE_MISC */
295
296#endif /* bits/wchar2-decl.h.  */