1*d1f43e70Sjoerg /* $NetBSD: global_locale.c,v 1.29 2024/06/08 21:35:18 joerg Exp $ */ 252ed7b03Stnozaki 352ed7b03Stnozaki /*- 452ed7b03Stnozaki * Copyright (c)2008 Citrus Project, 552ed7b03Stnozaki * All rights reserved. 652ed7b03Stnozaki * 752ed7b03Stnozaki * Redistribution and use in source and binary forms, with or without 852ed7b03Stnozaki * modification, are permitted provided that the following conditions 952ed7b03Stnozaki * are met: 1052ed7b03Stnozaki * 1. Redistributions of source code must retain the above copyright 1152ed7b03Stnozaki * notice, this list of conditions and the following disclaimer. 1252ed7b03Stnozaki * 2. Redistributions in binary form must reproduce the above copyright 1352ed7b03Stnozaki * notice, this list of conditions and the following disclaimer in the 1452ed7b03Stnozaki * documentation and/or other materials provided with the distribution. 1552ed7b03Stnozaki * 1652ed7b03Stnozaki * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1752ed7b03Stnozaki * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1852ed7b03Stnozaki * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1952ed7b03Stnozaki * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2052ed7b03Stnozaki * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2152ed7b03Stnozaki * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2252ed7b03Stnozaki * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2352ed7b03Stnozaki * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2452ed7b03Stnozaki * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2552ed7b03Stnozaki * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2652ed7b03Stnozaki * SUCH DAMAGE. 2752ed7b03Stnozaki */ 2852ed7b03Stnozaki 2952ed7b03Stnozaki #include <sys/cdefs.h> 3052ed7b03Stnozaki #if defined(LIBC_SCCS) && !defined(lint) 31*d1f43e70Sjoerg __RCSID("$NetBSD: global_locale.c,v 1.29 2024/06/08 21:35:18 joerg Exp $"); 3252ed7b03Stnozaki #endif /* LIBC_SCCS and not lint */ 3352ed7b03Stnozaki 34*d1f43e70Sjoerg #include "namespace.h" 35*d1f43e70Sjoerg 3652ed7b03Stnozaki #include <sys/types.h> 379a35d797Stnozaki #include <sys/ctype_bits.h> 3852ed7b03Stnozaki #include <sys/localedef.h> 39*d1f43e70Sjoerg #include <errno.h> 4052ed7b03Stnozaki #include <langinfo.h> 4152ed7b03Stnozaki #include <limits.h> 4252ed7b03Stnozaki #define __SETLOCALE_SOURCE__ 4352ed7b03Stnozaki #include <locale.h> 4452ed7b03Stnozaki #include <stdlib.h> 4552ed7b03Stnozaki 460f5f511fSjoerg #include "runetype_local.h" 4752ed7b03Stnozaki #include "setlocale_local.h" 4852ed7b03Stnozaki 492933c534Sjoerg static const _MessagesLocale _DefaultMessagesLocale = { 502933c534Sjoerg "^[Yy]", 512933c534Sjoerg "^[Nn]", 522933c534Sjoerg "yes", 532933c534Sjoerg "no" 542933c534Sjoerg }; 552933c534Sjoerg 562933c534Sjoerg static const _MonetaryLocale _DefaultMonetaryLocale = { 572933c534Sjoerg "", 582933c534Sjoerg "", 592933c534Sjoerg "", 602933c534Sjoerg "", 612933c534Sjoerg "", 622933c534Sjoerg "", 632933c534Sjoerg "", 6475f9c6b1Sriastradh CHAR_MAX, 6575f9c6b1Sriastradh CHAR_MAX, 6675f9c6b1Sriastradh CHAR_MAX, 6775f9c6b1Sriastradh CHAR_MAX, 6875f9c6b1Sriastradh CHAR_MAX, 6975f9c6b1Sriastradh CHAR_MAX, 7075f9c6b1Sriastradh CHAR_MAX, 7175f9c6b1Sriastradh CHAR_MAX, 7275f9c6b1Sriastradh CHAR_MAX, 7375f9c6b1Sriastradh CHAR_MAX, 7475f9c6b1Sriastradh CHAR_MAX, 7575f9c6b1Sriastradh CHAR_MAX, 7675f9c6b1Sriastradh CHAR_MAX, 7775f9c6b1Sriastradh CHAR_MAX 782933c534Sjoerg }; 792933c534Sjoerg 802933c534Sjoerg static const _NumericLocale _DefaultNumericLocale = { 812933c534Sjoerg ".", 822933c534Sjoerg "", 832933c534Sjoerg "" 842933c534Sjoerg }; 852933c534Sjoerg 862933c534Sjoerg static const _TimeLocale _DefaultTimeLocale = 872933c534Sjoerg { 882933c534Sjoerg { 892933c534Sjoerg "Sun","Mon","Tue","Wed","Thu","Fri","Sat", 902933c534Sjoerg }, 912933c534Sjoerg { 922933c534Sjoerg "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", 932933c534Sjoerg "Friday", "Saturday" 942933c534Sjoerg }, 952933c534Sjoerg { 962933c534Sjoerg "Jan", "Feb", "Mar", "Apr", "May", "Jun", 972933c534Sjoerg "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" 982933c534Sjoerg }, 992933c534Sjoerg { 1002933c534Sjoerg "January", "February", "March", "April", "May", "June", "July", 1012933c534Sjoerg "August", "September", "October", "November", "December" 1022933c534Sjoerg }, 1032933c534Sjoerg { 1042933c534Sjoerg "AM", "PM" 1052933c534Sjoerg }, 1062933c534Sjoerg "%a %b %e %H:%M:%S %Y", 1072933c534Sjoerg "%m/%d/%y", 1082933c534Sjoerg "%H:%M:%S", 1092933c534Sjoerg "%I:%M:%S %p" 1102933c534Sjoerg }; 1112933c534Sjoerg 112bdfde3daSjoerg static const char _lc_C_locale_name[] = _C_LOCALE; 113bdfde3daSjoerg 114bdfde3daSjoerg __dso_hidden const struct _locale_cache_t _C_cache = { 115bdfde3daSjoerg .ldata = { 11652ed7b03Stnozaki .decimal_point = __UNCONST("."), 11752ed7b03Stnozaki .thousands_sep = __UNCONST(""), 11852ed7b03Stnozaki .grouping = __UNCONST(""), 11952ed7b03Stnozaki .int_curr_symbol = __UNCONST(""), 12052ed7b03Stnozaki .currency_symbol = __UNCONST(""), 12152ed7b03Stnozaki .mon_decimal_point = __UNCONST(""), 12252ed7b03Stnozaki .mon_thousands_sep = __UNCONST(""), 12352ed7b03Stnozaki .mon_grouping = __UNCONST(""), 12452ed7b03Stnozaki .positive_sign = __UNCONST(""), 12552ed7b03Stnozaki .negative_sign = __UNCONST(""), 126191f1cb8Sriastradh .int_frac_digits = CHAR_MAX, 127191f1cb8Sriastradh .frac_digits = CHAR_MAX, 128191f1cb8Sriastradh .p_cs_precedes = CHAR_MAX, 129191f1cb8Sriastradh .p_sep_by_space = CHAR_MAX, 130191f1cb8Sriastradh .n_cs_precedes = CHAR_MAX, 131191f1cb8Sriastradh .n_sep_by_space = CHAR_MAX, 132191f1cb8Sriastradh .p_sign_posn = CHAR_MAX, 133191f1cb8Sriastradh .n_sign_posn = CHAR_MAX, 134191f1cb8Sriastradh .int_p_cs_precedes = CHAR_MAX, 135191f1cb8Sriastradh .int_n_cs_precedes = CHAR_MAX, 136191f1cb8Sriastradh .int_p_sep_by_space = CHAR_MAX, 137191f1cb8Sriastradh .int_n_sep_by_space = CHAR_MAX, 138191f1cb8Sriastradh .int_p_sign_posn = CHAR_MAX, 139191f1cb8Sriastradh .int_n_sign_posn = CHAR_MAX, 140bdfde3daSjoerg }, 141bdfde3daSjoerg .monetary_name = _lc_C_locale_name, 142bdfde3daSjoerg .numeric_name = _lc_C_locale_name, 143*d1f43e70Sjoerg .message_name = _lc_C_locale_name, 144*d1f43e70Sjoerg .errlistp = &sys_errlist, 145*d1f43e70Sjoerg .errlist_prefix = "Unknown error: %d", 146bbed57c2Stnozaki }; 147bbed57c2Stnozaki 1483ae9c710Schristos struct _locale _lc_global_locale = { 149bdfde3daSjoerg .cache = &_C_cache, 150db741099Stnozaki .query = { _C_LOCALE }, 15152ed7b03Stnozaki .part_name = { 152e5717105Sriastradh [LC_ALL ] = _lc_C_locale_name, 153e5717105Sriastradh [LC_COLLATE ] = _lc_C_locale_name, 154e5717105Sriastradh [LC_CTYPE ] = _lc_C_locale_name, 155e5717105Sriastradh [LC_MONETARY] = _lc_C_locale_name, 156e5717105Sriastradh [LC_NUMERIC ] = _lc_C_locale_name, 157e5717105Sriastradh [LC_TIME ] = _lc_C_locale_name, 158e5717105Sriastradh [LC_MESSAGES] = _lc_C_locale_name, 15952ed7b03Stnozaki }, 16052ed7b03Stnozaki .part_impl = { 161e5717105Sriastradh [LC_ALL ] = (_locale_part_t)NULL, 162e5717105Sriastradh [LC_COLLATE ] = (_locale_part_t)NULL, 163e5717105Sriastradh [LC_CTYPE ] = (_locale_part_t) 16452ed7b03Stnozaki __UNCONST(&_DefaultRuneLocale), 165e5717105Sriastradh [LC_MONETARY] = (_locale_part_t) 16652ed7b03Stnozaki __UNCONST(&_DefaultMonetaryLocale), 167e5717105Sriastradh [LC_NUMERIC ] = (_locale_part_t) 16852ed7b03Stnozaki __UNCONST(&_DefaultNumericLocale), 169e5717105Sriastradh [LC_MESSAGES] = (_locale_part_t) 17052ed7b03Stnozaki __UNCONST(&_DefaultMessagesLocale), 171e5717105Sriastradh [LC_TIME] = (_locale_part_t) 17299fac95bSjoerg __UNCONST(&_DefaultTimeLocale), 17352ed7b03Stnozaki }, 17452ed7b03Stnozaki }; 175e0ac190eSjoerg 1763ae9c710Schristos const struct _locale _lc_C_locale = { 177bdfde3daSjoerg .cache = &_C_cache, 178e0ac190eSjoerg .query = { _C_LOCALE }, 179e0ac190eSjoerg .part_name = { 180e5717105Sriastradh [LC_ALL ] = _lc_C_locale_name, 181e5717105Sriastradh [LC_COLLATE ] = _lc_C_locale_name, 182e5717105Sriastradh [LC_CTYPE ] = _lc_C_locale_name, 183e5717105Sriastradh [LC_MONETARY] = _lc_C_locale_name, 184e5717105Sriastradh [LC_NUMERIC ] = _lc_C_locale_name, 185e5717105Sriastradh [LC_TIME ] = _lc_C_locale_name, 186e5717105Sriastradh [LC_MESSAGES] = _lc_C_locale_name, 187e0ac190eSjoerg }, 188e0ac190eSjoerg .part_impl = { 189e5717105Sriastradh [LC_ALL ] = (_locale_part_t)NULL, 190e5717105Sriastradh [LC_COLLATE ] = (_locale_part_t)NULL, 191e5717105Sriastradh [LC_CTYPE ] = (_locale_part_t) 192e0ac190eSjoerg __UNCONST(&_DefaultRuneLocale), 193e5717105Sriastradh [LC_MONETARY] = (_locale_part_t) 194e0ac190eSjoerg __UNCONST(&_DefaultMonetaryLocale), 195e5717105Sriastradh [LC_NUMERIC ] = (_locale_part_t) 196e0ac190eSjoerg __UNCONST(&_DefaultNumericLocale), 197e5717105Sriastradh [LC_MESSAGES] = (_locale_part_t) 198e0ac190eSjoerg __UNCONST(&_DefaultMessagesLocale), 199e5717105Sriastradh [LC_TIME] = (_locale_part_t) 200e0ac190eSjoerg __UNCONST(&_DefaultTimeLocale), 201e0ac190eSjoerg }, 202e0ac190eSjoerg }; 203