1*0e03e9aaSnia /* $NetBSD: wchar.h,v 1.46 2024/11/01 16:36:58 nia Exp $ */ 297e0963dSitojun 397e0963dSitojun /*- 497e0963dSitojun * Copyright (c)1999 Citrus Project, 597e0963dSitojun * All rights reserved. 697e0963dSitojun * 797e0963dSitojun * Redistribution and use in source and binary forms, with or without 897e0963dSitojun * modification, are permitted provided that the following conditions 997e0963dSitojun * are met: 1097e0963dSitojun * 1. Redistributions of source code must retain the above copyright 1197e0963dSitojun * notice, this list of conditions and the following disclaimer. 1297e0963dSitojun * 2. Redistributions in binary form must reproduce the above copyright 1397e0963dSitojun * notice, this list of conditions and the following disclaimer in the 1497e0963dSitojun * documentation and/or other materials provided with the distribution. 1597e0963dSitojun * 1697e0963dSitojun * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1797e0963dSitojun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1897e0963dSitojun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1997e0963dSitojun * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2097e0963dSitojun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2197e0963dSitojun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2297e0963dSitojun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2397e0963dSitojun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2497e0963dSitojun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2597e0963dSitojun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2697e0963dSitojun * SUCH DAMAGE. 2797e0963dSitojun */ 28405a7540Skleink 29405a7540Skleink /*- 30405a7540Skleink * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc. 31405a7540Skleink * All rights reserved. 32405a7540Skleink * 33405a7540Skleink * This code is derived from software contributed to The NetBSD Foundation 34405a7540Skleink * by Julian Coleman. 35405a7540Skleink * 36405a7540Skleink * Redistribution and use in source and binary forms, with or without 37405a7540Skleink * modification, are permitted provided that the following conditions 38405a7540Skleink * are met: 39405a7540Skleink * 1. Redistributions of source code must retain the above copyright 40405a7540Skleink * notice, this list of conditions and the following disclaimer. 41405a7540Skleink * 2. Redistributions in binary form must reproduce the above copyright 42405a7540Skleink * notice, this list of conditions and the following disclaimer in the 43405a7540Skleink * documentation and/or other materials provided with the distribution. 44405a7540Skleink * 45405a7540Skleink * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 46405a7540Skleink * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 47405a7540Skleink * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 48405a7540Skleink * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 49405a7540Skleink * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 50405a7540Skleink * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 51405a7540Skleink * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 52405a7540Skleink * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 53405a7540Skleink * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 54405a7540Skleink * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 55405a7540Skleink * POSSIBILITY OF SUCH DAMAGE. 56405a7540Skleink */ 57405a7540Skleink 58405a7540Skleink #ifndef _WCHAR_H_ 59405a7540Skleink #define _WCHAR_H_ 60405a7540Skleink 6197e0963dSitojun #include <sys/cdefs.h> 624be7a2dcSbjh21 #include <sys/featuretest.h> 63c19ffd78Skleink #include <machine/wchar_limits.h> 64377cb4e4Stnozaki #include <sys/ansi.h> 65e07051a7Sitojun #include <sys/null.h> 66405a7540Skleink 6717f3654aSyamt #include <stdio.h> /* for FILE* */ 6817f3654aSyamt 69db576bf3Schristos #if defined(_BSD_WCHAR_T_) && !defined(__cplusplus) 70405a7540Skleink typedef _BSD_WCHAR_T_ wchar_t; 71405a7540Skleink #undef _BSD_WCHAR_T_ 72405a7540Skleink #endif 73405a7540Skleink 744c56e769Sitojun #ifdef _BSD_MBSTATE_T_ 754c56e769Sitojun typedef _BSD_MBSTATE_T_ mbstate_t; 764c56e769Sitojun #undef _BSD_MBSTATE_T_ 774c56e769Sitojun #endif 784c56e769Sitojun 79405a7540Skleink #ifdef _BSD_WINT_T_ 80405a7540Skleink typedef _BSD_WINT_T_ wint_t; 81405a7540Skleink #undef _BSD_WINT_T_ 82405a7540Skleink #endif 83405a7540Skleink 84405a7540Skleink #ifdef _BSD_SIZE_T_ 85405a7540Skleink typedef _BSD_SIZE_T_ size_t; 86405a7540Skleink #undef _BSD_SIZE_T_ 87405a7540Skleink #endif 88405a7540Skleink 893eb244d8Sjoerg #if defined(_POSIX_C_SOURCE) 903eb244d8Sjoerg #ifndef __VA_LIST_DECLARED 913eb244d8Sjoerg typedef __va_list va_list; 923eb244d8Sjoerg #define __VA_LIST_DECLARED 933eb244d8Sjoerg #endif 943eb244d8Sjoerg #endif 953eb244d8Sjoerg 96eb808713Schristos struct tm; 97eb808713Schristos 9819b7469aSperry __BEGIN_DECLS 9919b7469aSperry wint_t btowc(int); 10019b7469aSperry size_t mbrlen(const char * __restrict, size_t, mbstate_t * __restrict); 10119b7469aSperry size_t mbrtowc(wchar_t * __restrict, const char * __restrict, size_t, 10219b7469aSperry mbstate_t * __restrict); 10319b7469aSperry int mbsinit(const mbstate_t *); 10419b7469aSperry size_t mbsrtowcs(wchar_t * __restrict, const char ** __restrict, size_t, 10519b7469aSperry mbstate_t * __restrict); 10619b7469aSperry size_t wcrtomb(char * __restrict, wchar_t, mbstate_t * __restrict); 10719b7469aSperry wchar_t *wcscat(wchar_t * __restrict, const wchar_t * __restrict); 10819b7469aSperry wchar_t *wcschr(const wchar_t *, wchar_t); 10919b7469aSperry int wcscmp(const wchar_t *, const wchar_t *); 11019b7469aSperry int wcscoll(const wchar_t *, const wchar_t *); 11119b7469aSperry wchar_t *wcscpy(wchar_t * __restrict, const wchar_t * __restrict); 11219b7469aSperry size_t wcscspn(const wchar_t *, const wchar_t *); 113eb808713Schristos size_t wcsftime(wchar_t * __restrict, size_t, const wchar_t * __restrict, 114eb808713Schristos const struct tm * __restrict); 11519b7469aSperry size_t wcslen(const wchar_t *); 11619b7469aSperry wchar_t *wcsncat(wchar_t * __restrict, const wchar_t * __restrict, size_t); 11719b7469aSperry int wcsncmp(const wchar_t *, const wchar_t *, size_t); 11819b7469aSperry wchar_t *wcsncpy(wchar_t * __restrict , const wchar_t * __restrict, size_t); 1196245abaaSkamil size_t wcsnlen(const wchar_t *, size_t); 12019b7469aSperry wchar_t *wcspbrk(const wchar_t *, const wchar_t *); 12119b7469aSperry wchar_t *wcsrchr(const wchar_t *, wchar_t); 12219b7469aSperry size_t wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t, 12319b7469aSperry mbstate_t * __restrict); 12419b7469aSperry size_t wcsspn(const wchar_t *, const wchar_t *); 12519b7469aSperry wchar_t *wcsstr(const wchar_t *, const wchar_t *); 12619b7469aSperry wchar_t *wcstok(wchar_t * __restrict, const wchar_t * __restrict, 12719b7469aSperry wchar_t ** __restrict); 12819b7469aSperry size_t wcsxfrm(wchar_t *, const wchar_t *, size_t); 12919b7469aSperry wchar_t *wcswcs(const wchar_t *, const wchar_t *); 13019b7469aSperry wchar_t *wmemchr(const wchar_t *, wchar_t, size_t); 13119b7469aSperry int wmemcmp(const wchar_t *, const wchar_t *, size_t); 13219b7469aSperry wchar_t *wmemcpy(wchar_t * __restrict, const wchar_t * __restrict, size_t); 1336a8ddfc0Schristos wchar_t *wmempcpy(wchar_t * __restrict, const wchar_t * __restrict, size_t); 13419b7469aSperry wchar_t *wmemmove(wchar_t *, const wchar_t *, size_t); 13519b7469aSperry wchar_t *wmemset(wchar_t *, wchar_t, size_t); 13619b7469aSperry 137*0e03e9aaSnia /* 138*0e03e9aaSnia * IEEE Std 1003.1-2024 (POSIX.1-2024) 139*0e03e9aaSnia */ 140*0e03e9aaSnia #if (_POSIX_C_SOURCE - 0) >= 202405L || (_XOPEN_SOURCE - 0 >= 800) || \ 141*0e03e9aaSnia defined(_NETBSD_SOURCE) 14219b7469aSperry size_t wcslcat(wchar_t *, const wchar_t *, size_t); 14319b7469aSperry size_t wcslcpy(wchar_t *, const wchar_t *, size_t); 1441530e686Smaya #endif 14519b7469aSperry 1461530e686Smaya #if defined(_NETBSD_SOURCE) || \ 1471530e686Smaya (_POSIX_C_SOURCE - 0 >= 200112L) || (_XOPEN_SOURCE - 0) >= 600 1481530e686Smaya int wcswidth(const wchar_t *, size_t); 1491530e686Smaya int wcwidth(wchar_t); 1501530e686Smaya #endif 1511530e686Smaya 1521530e686Smaya int wctob(wint_t); 15319b7469aSperry unsigned long int wcstoul(const wchar_t * __restrict, 15419b7469aSperry wchar_t ** __restrict, int); 15519b7469aSperry long int wcstol(const wchar_t * __restrict, 15619b7469aSperry wchar_t ** __restrict, int); 15719b7469aSperry double wcstod(const wchar_t * __restrict, wchar_t ** __restrict); 15819b7469aSperry 159af730bf1Sjoerg #if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) >= 199901L || \ 160af730bf1Sjoerg (__cplusplus - 0) >= 201103L || defined(_NETBSD_SOURCE) || \ 1610809f575Sdegroote (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 600 162f9de1ba5Stnozaki float wcstof(const wchar_t * __restrict, wchar_t ** __restrict); 163f9de1ba5Stnozaki long double wcstold(const wchar_t * __restrict, wchar_t ** __restrict); 164f9de1ba5Stnozaki 16519b7469aSperry /* LONGLONG */ 16619b7469aSperry long long int wcstoll(const wchar_t * __restrict, 16719b7469aSperry wchar_t ** __restrict, int); 16819b7469aSperry /* LONGLONG */ 16919b7469aSperry unsigned long long int wcstoull(const wchar_t * __restrict, 17019b7469aSperry wchar_t ** __restrict, int); 17119b7469aSperry #endif 17219b7469aSperry 173faef3224Schristos #if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ 174faef3224Schristos defined(_NETBSD_SOURCE) 175faef3224Schristos FILE *open_wmemstream(wchar_t **, size_t *); 176faef3224Schristos #endif 177faef3224Schristos 17819b7469aSperry wint_t ungetwc(wint_t, FILE *); 17919b7469aSperry wint_t fgetwc(FILE *); 18019b7469aSperry wchar_t *fgetws(wchar_t * __restrict, int, FILE * __restrict); 18119b7469aSperry wint_t getwc(FILE *); 18219b7469aSperry wint_t getwchar(void); 18319b7469aSperry wint_t fputwc(wchar_t, FILE *); 18419b7469aSperry int fputws(const wchar_t * __restrict, FILE * __restrict); 18519b7469aSperry wint_t putwc(wchar_t, FILE *); 18619b7469aSperry wint_t putwchar(wchar_t); 18719b7469aSperry 18819b7469aSperry int fwide(FILE *, int); 18975b76923Schristos 19075b76923Schristos wchar_t *fgetwln(FILE * __restrict, size_t * __restrict); 19175b76923Schristos int fwprintf(FILE * __restrict, const wchar_t * __restrict, ...); 19275b76923Schristos int fwscanf(FILE * __restrict, const wchar_t * __restrict, ...); 19375b76923Schristos int swprintf(wchar_t * __restrict, size_t n, const wchar_t * __restrict, ...); 19475b76923Schristos int swscanf(const wchar_t * __restrict, const wchar_t * __restrict, ...); 1953eb244d8Sjoerg int vfwprintf(FILE * __restrict, const wchar_t * __restrict, __va_list); 19675b76923Schristos int vswprintf(wchar_t * __restrict, size_t, const wchar_t * __restrict, 1973eb244d8Sjoerg __va_list); 1983eb244d8Sjoerg int vwprintf(const wchar_t * __restrict, __va_list); 19975b76923Schristos int wprintf(const wchar_t * __restrict, ...); 20075b76923Schristos int wscanf(const wchar_t * __restrict, ...); 20175b76923Schristos #if defined(_ISOC99_SOURCE) || (__STDC_VERSION__ - 0) > 199901L || \ 202af730bf1Sjoerg (__cplusplus - 0) >= 201103L || defined(_NETBSD_SOURCE) || \ 2030809f575Sdegroote (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 600 2043eb244d8Sjoerg int vfwscanf(FILE * __restrict, const wchar_t * __restrict, __va_list); 20575b76923Schristos int vswscanf(const wchar_t * __restrict, const wchar_t * __restrict, 2063eb244d8Sjoerg __va_list); 2073eb244d8Sjoerg int vwscanf(const wchar_t * __restrict, __va_list); 20875b76923Schristos #endif 209cf3e6ebdSchristos #if defined(_NETBSD_SOURCE) 210cf3e6ebdSchristos struct tinfo; 211cf3e6ebdSchristos int t_putws(struct tinfo *, const wchar_t *, int, void (*)(wchar_t, void *), 212cf3e6ebdSchristos void *); 21354097ce7Schristos wchar_t *wcsdup (const wchar_t *); 21454097ce7Schristos int wcsncasecmp (const wchar_t *, const wchar_t *, size_t); 21554097ce7Schristos int wcscasecmp(const wchar_t *, const wchar_t *); 216cf3e6ebdSchristos #endif 21719b7469aSperry __END_DECLS 21819b7469aSperry 219b6ad76f4Sitojun #ifndef WEOF 220b6ad76f4Sitojun #define WEOF ((wint_t)-1) 221b6ad76f4Sitojun #endif 222b6ad76f4Sitojun 22317f3654aSyamt #define getwc(f) fgetwc(f) 22417f3654aSyamt #define getwchar() getwc(stdin) 22517f3654aSyamt #define putwc(wc, f) fputwc((wc), (f)) 22617f3654aSyamt #define putwchar(wc) putwc((wc), stdout) 22717f3654aSyamt 2282eb3224aSjoerg #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE) 2292eb3224aSjoerg # ifndef __LOCALE_T_DECLARED 2302eb3224aSjoerg typedef struct _locale *locale_t; 2312eb3224aSjoerg # define __LOCALE_T_DECLARED 2322eb3224aSjoerg # endif 233d1548b5eSjoerg __BEGIN_DECLS 23485a67e61Sjoerg size_t mbsnrtowcs(wchar_t * __restrict, const char ** __restrict, size_t, 23585a67e61Sjoerg size_t, mbstate_t * __restrict); 23685a67e61Sjoerg size_t wcsnrtombs(char * __restrict, const wchar_t ** __restrict, size_t, 23785a67e61Sjoerg size_t, mbstate_t * __restrict); 23885a67e61Sjoerg 23910e0e4a0Sjoerg int wcscoll_l(const wchar_t *, const wchar_t *, locale_t); 24010e0e4a0Sjoerg size_t wcsxfrm_l(wchar_t *, const wchar_t *, size_t, locale_t); 24110e0e4a0Sjoerg int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t); 24210e0e4a0Sjoerg int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t); 24310e0e4a0Sjoerg 2449c11b124Sjoerg size_t wcsftime_l(wchar_t * __restrict, size_t, const wchar_t * __restrict, 2459c11b124Sjoerg const struct tm * __restrict, locale_t); 2469c11b124Sjoerg 2479a7fa6ffSjoerg float wcstof_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t); 2489a7fa6ffSjoerg double wcstod_l(const wchar_t * __restrict, wchar_t ** __restrict, locale_t); 2499a7fa6ffSjoerg long double wcstold_l(const wchar_t * __restrict, wchar_t ** __restrict, 2509a7fa6ffSjoerg locale_t); 251444e3184Sjoerg long int wcstol_l(const wchar_t * __restrict, wchar_t ** __restrict, int, 252444e3184Sjoerg locale_t); 253444e3184Sjoerg unsigned long int wcstoul_l(const wchar_t * __restrict, 254444e3184Sjoerg wchar_t ** __restrict, int, locale_t); 255444e3184Sjoerg /* LONGLONG */ 256444e3184Sjoerg long long int wcstoll_l(const wchar_t * __restrict, wchar_t ** __restrict, int, 257444e3184Sjoerg locale_t); 258444e3184Sjoerg /* LONGLONG */ 259444e3184Sjoerg unsigned long long int wcstoull_l(const wchar_t * __restrict, 260444e3184Sjoerg wchar_t ** __restrict, int, locale_t); 2612eb3224aSjoerg int wcwidth_l(wchar_t, locale_t); 2622eb3224aSjoerg int wcswidth_l(const wchar_t *, size_t, locale_t); 263d1548b5eSjoerg __END_DECLS 26410e0e4a0Sjoerg #endif /* _POSIX_C_SOURCE || _NETBSD_SOURCE */ 26510e0e4a0Sjoerg 26610e0e4a0Sjoerg #if defined(_NETBSD_SOURCE) 267d1548b5eSjoerg __BEGIN_DECLS 26810e0e4a0Sjoerg wint_t btowc_l(int, locale_t); 26910e0e4a0Sjoerg size_t mbrlen_l(const char * __restrict, size_t, mbstate_t * __restrict, 27010e0e4a0Sjoerg locale_t); 27110e0e4a0Sjoerg size_t mbrtowc_l(wchar_t * __restrict, const char * __restrict, size_t, 27210e0e4a0Sjoerg mbstate_t * __restrict, locale_t); 27310e0e4a0Sjoerg int mbsinit_l(const mbstate_t *, locale_t); 27410e0e4a0Sjoerg size_t mbsrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t, 27510e0e4a0Sjoerg mbstate_t * __restrict, locale_t); 27685a67e61Sjoerg size_t mbsnrtowcs_l(wchar_t * __restrict, const char ** __restrict, size_t, 27785a67e61Sjoerg size_t, mbstate_t * __restrict, locale_t); 27810e0e4a0Sjoerg size_t wcrtomb_l(char * __restrict, wchar_t, mbstate_t * __restrict, locale_t); 27910e0e4a0Sjoerg size_t wcsrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t, 28010e0e4a0Sjoerg mbstate_t * __restrict, locale_t); 28185a67e61Sjoerg size_t wcsnrtombs_l(char * __restrict, const wchar_t ** __restrict, size_t, 28285a67e61Sjoerg size_t, mbstate_t * __restrict, locale_t); 28310e0e4a0Sjoerg int wctob_l(wint_t, locale_t); 2842561b634Sjoerg 2852561b634Sjoerg int fwprintf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, ...); 2862561b634Sjoerg int swprintf_l(wchar_t * __restrict, size_t n, locale_t, 2872561b634Sjoerg const wchar_t * __restrict, ...); 2882561b634Sjoerg int vfwprintf_l(FILE * __restrict, locale_t, 2892561b634Sjoerg const wchar_t * __restrict, __va_list); 2902561b634Sjoerg int vswprintf_l(wchar_t * __restrict, size_t, locale_t, 2912561b634Sjoerg const wchar_t * __restrict, __va_list); 2922561b634Sjoerg int vwprintf_l(locale_t, const wchar_t * __restrict, __va_list); 2932561b634Sjoerg int wprintf_l(locale_t, const wchar_t * __restrict, ...); 2949790c07aSjoerg 2959790c07aSjoerg int fwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, ...); 2969790c07aSjoerg int swscanf_l(const wchar_t * __restrict, locale_t, const wchar_t * 2979790c07aSjoerg __restrict, ...); 2989790c07aSjoerg int wscanf_l(locale_t, const wchar_t * __restrict, ...); 2999790c07aSjoerg int vfwscanf_l(FILE * __restrict, locale_t, const wchar_t * __restrict, 3009790c07aSjoerg __va_list); 3019790c07aSjoerg int vswscanf_l(const wchar_t * __restrict, locale_t, const wchar_t * __restrict, 3029790c07aSjoerg __va_list); 3039790c07aSjoerg int vwscanf_l(locale_t, const wchar_t * __restrict, __va_list); 304d1548b5eSjoerg __END_DECLS 30510e0e4a0Sjoerg #endif /* _NETBSD_SOURCE */ 3062eb3224aSjoerg 307405a7540Skleink #endif /* !_WCHAR_H_ */ 308