1 1.18 joerg /* $NetBSD: setlocale_local.h,v 1.18 2024/06/08 21:35:18 joerg Exp $ */ 2 1.1 tnozaki 3 1.1 tnozaki /*- 4 1.1 tnozaki * Copyright (c)2008 Citrus Project, 5 1.1 tnozaki * All rights reserved. 6 1.1 tnozaki * 7 1.1 tnozaki * Redistribution and use in source and binary forms, with or without 8 1.1 tnozaki * modification, are permitted provided that the following conditions 9 1.1 tnozaki * are met: 10 1.1 tnozaki * 1. Redistributions of source code must retain the above copyright 11 1.1 tnozaki * notice, this list of conditions and the following disclaimer. 12 1.1 tnozaki * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 tnozaki * notice, this list of conditions and the following disclaimer in the 14 1.1 tnozaki * documentation and/or other materials provided with the distribution. 15 1.1 tnozaki * 16 1.1 tnozaki * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 1.1 tnozaki * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 1.1 tnozaki * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 1.1 tnozaki * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 1.1 tnozaki * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 1.1 tnozaki * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 1.1 tnozaki * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 1.1 tnozaki * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 1.1 tnozaki * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 1.1 tnozaki * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 1.1 tnozaki * SUCH DAMAGE. 27 1.1 tnozaki */ 28 1.1 tnozaki 29 1.1 tnozaki #ifndef _SETLOCALE_LOCAL_H_ 30 1.1 tnozaki #define _SETLOCALE_LOCAL_H_ 31 1.1 tnozaki 32 1.15 joerg #include <sys/queue.h> 33 1.15 joerg #include <locale.h> 34 1.15 joerg 35 1.9 joerg #include "ctype_local.h" 36 1.9 joerg 37 1.1 tnozaki #define _LOCALENAME_LEN_MAX 33 38 1.1 tnozaki 39 1.1 tnozaki #define _C_LOCALE "C" 40 1.1 tnozaki #define _POSIX_LOCALE "POSIX" 41 1.1 tnozaki 42 1.1 tnozaki extern const char *_PathLocale; 43 1.1 tnozaki #define _LOCALE_ALIAS_NAME "locale.alias" 44 1.1 tnozaki 45 1.1 tnozaki typedef void *_locale_part_t; 46 1.1 tnozaki 47 1.1 tnozaki struct _locale_cache_t { 48 1.15 joerg SLIST_ENTRY(_locale_cache_t) cache_link; 49 1.15 joerg const char *monetary_name; 50 1.15 joerg const char *numeric_name; 51 1.18 joerg const char *message_name; 52 1.15 joerg struct lconv ldata; 53 1.18 joerg const char * errlist_prefix; 54 1.18 joerg const char * const *errlist; 55 1.18 joerg const char * const **errlistp; 56 1.1 tnozaki }; 57 1.1 tnozaki 58 1.10 joerg struct _locale { 59 1.15 joerg const struct _locale_cache_t *cache; 60 1.1 tnozaki char query[_LOCALENAME_LEN_MAX * (_LC_LAST - 1)]; 61 1.1 tnozaki const char *part_name[_LC_LAST]; 62 1.1 tnozaki _locale_part_t part_impl[_LC_LAST]; 63 1.1 tnozaki }; 64 1.1 tnozaki 65 1.1 tnozaki typedef const char *(*_locale_set_t)(const char * __restrict, 66 1.10 joerg struct _locale * __restrict); 67 1.1 tnozaki 68 1.1 tnozaki __BEGIN_DECLS 69 1.8 tnozaki _locale_set_t _find_category(int); 70 1.1 tnozaki const char *_get_locale_env(const char *); 71 1.7 tnozaki char *__setlocale(int, const char *); 72 1.8 tnozaki 73 1.8 tnozaki const char *_generic_LC_ALL_setlocale( 74 1.10 joerg const char * __restrict, struct _locale * __restrict); 75 1.8 tnozaki const char *_dummy_LC_COLLATE_setlocale( 76 1.10 joerg const char * __restrict, struct _locale * __restrict); 77 1.8 tnozaki const char *_citrus_LC_CTYPE_setlocale( 78 1.10 joerg const char * __restrict, struct _locale * __restrict); 79 1.8 tnozaki const char *_citrus_LC_MONETARY_setlocale( 80 1.10 joerg const char * __restrict, struct _locale * __restrict); 81 1.8 tnozaki const char *_citrus_LC_NUMERIC_setlocale( 82 1.10 joerg const char * __restrict, struct _locale * __restrict); 83 1.8 tnozaki const char *_citrus_LC_TIME_setlocale( 84 1.10 joerg const char * __restrict, struct _locale * __restrict); 85 1.8 tnozaki const char *_citrus_LC_MESSAGES_setlocale( 86 1.10 joerg const char * __restrict, struct _locale * __restrict); 87 1.15 joerg 88 1.15 joerg int _setlocale_cache(locale_t, struct _locale_cache_t *); 89 1.1 tnozaki __END_DECLS 90 1.1 tnozaki 91 1.12 joerg #ifdef _LIBC 92 1.15 joerg extern __dso_hidden const struct _locale_cache_t _C_cache; 93 1.12 joerg 94 1.12 joerg static __inline struct _locale * 95 1.12 joerg _current_locale(void) 96 1.12 joerg { 97 1.12 joerg return &_lc_global_locale; 98 1.12 joerg } 99 1.12 joerg #endif 100 1.5 tnozaki 101 1.6 tnozaki extern size_t __mb_len_max_runtime; 102 1.6 tnozaki 103 1.1 tnozaki #endif /*_SETLOCALE_LOCAL_H_*/ 104