1*820c1a8dSHiroo HAYASHI /* Query locale dependent information for formatting numbers.
2*820c1a8dSHiroo HAYASHI Copyright (C) 2012-2021 Free Software Foundation, Inc.
3*820c1a8dSHiroo HAYASHI
4*820c1a8dSHiroo HAYASHI This file is free software: you can redistribute it and/or modify
5*820c1a8dSHiroo HAYASHI it under the terms of the GNU Lesser General Public License as
6*820c1a8dSHiroo HAYASHI published by the Free Software Foundation; either version 2.1 of the
7*820c1a8dSHiroo HAYASHI License, or (at your option) any later version.
8*820c1a8dSHiroo HAYASHI
9*820c1a8dSHiroo HAYASHI This file is distributed in the hope that it will be useful,
10*820c1a8dSHiroo HAYASHI but WITHOUT ANY WARRANTY; without even the implied warranty of
11*820c1a8dSHiroo HAYASHI MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12*820c1a8dSHiroo HAYASHI GNU Lesser General Public License for more details.
13*820c1a8dSHiroo HAYASHI
14*820c1a8dSHiroo HAYASHI You should have received a copy of the GNU Lesser General Public License
15*820c1a8dSHiroo HAYASHI along with this program. If not, see <https://www.gnu.org/licenses/>. */
16*820c1a8dSHiroo HAYASHI
17*820c1a8dSHiroo HAYASHI #include <config.h>
18*820c1a8dSHiroo HAYASHI
19*820c1a8dSHiroo HAYASHI /* Specification. */
20*820c1a8dSHiroo HAYASHI #include <locale.h>
21*820c1a8dSHiroo HAYASHI
22*820c1a8dSHiroo HAYASHI #if HAVE_STRUCT_LCONV_DECIMAL_POINT
23*820c1a8dSHiroo HAYASHI
24*820c1a8dSHiroo HAYASHI /* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_*
25*820c1a8dSHiroo HAYASHI members. */
26*820c1a8dSHiroo HAYASHI
27*820c1a8dSHiroo HAYASHI struct lconv *
localeconv(void)28*820c1a8dSHiroo HAYASHI localeconv (void)
29*820c1a8dSHiroo HAYASHI {
30*820c1a8dSHiroo HAYASHI static struct lconv result;
31*820c1a8dSHiroo HAYASHI # undef lconv
32*820c1a8dSHiroo HAYASHI # undef localeconv
33*820c1a8dSHiroo HAYASHI struct lconv *sys_result = localeconv ();
34*820c1a8dSHiroo HAYASHI
35*820c1a8dSHiroo HAYASHI result.decimal_point = sys_result->decimal_point;
36*820c1a8dSHiroo HAYASHI result.thousands_sep = sys_result->thousands_sep;
37*820c1a8dSHiroo HAYASHI result.grouping = sys_result->grouping;
38*820c1a8dSHiroo HAYASHI result.mon_decimal_point = sys_result->mon_decimal_point;
39*820c1a8dSHiroo HAYASHI result.mon_thousands_sep = sys_result->mon_thousands_sep;
40*820c1a8dSHiroo HAYASHI result.mon_grouping = sys_result->mon_grouping;
41*820c1a8dSHiroo HAYASHI result.positive_sign = sys_result->positive_sign;
42*820c1a8dSHiroo HAYASHI result.negative_sign = sys_result->negative_sign;
43*820c1a8dSHiroo HAYASHI result.currency_symbol = sys_result->currency_symbol;
44*820c1a8dSHiroo HAYASHI result.frac_digits = sys_result->frac_digits;
45*820c1a8dSHiroo HAYASHI result.p_cs_precedes = sys_result->p_cs_precedes;
46*820c1a8dSHiroo HAYASHI result.p_sign_posn = sys_result->p_sign_posn;
47*820c1a8dSHiroo HAYASHI result.p_sep_by_space = sys_result->p_sep_by_space;
48*820c1a8dSHiroo HAYASHI result.n_cs_precedes = sys_result->n_cs_precedes;
49*820c1a8dSHiroo HAYASHI result.n_sign_posn = sys_result->n_sign_posn;
50*820c1a8dSHiroo HAYASHI result.n_sep_by_space = sys_result->n_sep_by_space;
51*820c1a8dSHiroo HAYASHI result.int_curr_symbol = sys_result->int_curr_symbol;
52*820c1a8dSHiroo HAYASHI result.int_frac_digits = sys_result->int_frac_digits;
53*820c1a8dSHiroo HAYASHI result.int_p_cs_precedes = sys_result->p_cs_precedes;
54*820c1a8dSHiroo HAYASHI result.int_p_sign_posn = sys_result->p_sign_posn;
55*820c1a8dSHiroo HAYASHI result.int_p_sep_by_space = sys_result->p_sep_by_space;
56*820c1a8dSHiroo HAYASHI result.int_n_cs_precedes = sys_result->n_cs_precedes;
57*820c1a8dSHiroo HAYASHI result.int_n_sign_posn = sys_result->n_sign_posn;
58*820c1a8dSHiroo HAYASHI result.int_n_sep_by_space = sys_result->n_sep_by_space;
59*820c1a8dSHiroo HAYASHI
60*820c1a8dSHiroo HAYASHI return &result;
61*820c1a8dSHiroo HAYASHI }
62*820c1a8dSHiroo HAYASHI
63*820c1a8dSHiroo HAYASHI #else
64*820c1a8dSHiroo HAYASHI
65*820c1a8dSHiroo HAYASHI /* Override for platforms where 'struct lconv' is a dummy. */
66*820c1a8dSHiroo HAYASHI
67*820c1a8dSHiroo HAYASHI # include <limits.h>
68*820c1a8dSHiroo HAYASHI
69*820c1a8dSHiroo HAYASHI struct lconv *
localeconv(void)70*820c1a8dSHiroo HAYASHI localeconv (void)
71*820c1a8dSHiroo HAYASHI {
72*820c1a8dSHiroo HAYASHI static /*const*/ struct lconv result =
73*820c1a8dSHiroo HAYASHI {
74*820c1a8dSHiroo HAYASHI /* decimal_point */ ".",
75*820c1a8dSHiroo HAYASHI /* thousands_sep */ "",
76*820c1a8dSHiroo HAYASHI /* grouping */ "",
77*820c1a8dSHiroo HAYASHI /* mon_decimal_point */ "",
78*820c1a8dSHiroo HAYASHI /* mon_thousands_sep */ "",
79*820c1a8dSHiroo HAYASHI /* mon_grouping */ "",
80*820c1a8dSHiroo HAYASHI /* positive_sign */ "",
81*820c1a8dSHiroo HAYASHI /* negative_sign */ "",
82*820c1a8dSHiroo HAYASHI /* currency_symbol */ "",
83*820c1a8dSHiroo HAYASHI /* frac_digits */ CHAR_MAX,
84*820c1a8dSHiroo HAYASHI /* p_cs_precedes */ CHAR_MAX,
85*820c1a8dSHiroo HAYASHI /* p_sign_posn */ CHAR_MAX,
86*820c1a8dSHiroo HAYASHI /* p_sep_by_space */ CHAR_MAX,
87*820c1a8dSHiroo HAYASHI /* n_cs_precedes */ CHAR_MAX,
88*820c1a8dSHiroo HAYASHI /* n_sign_posn */ CHAR_MAX,
89*820c1a8dSHiroo HAYASHI /* n_sep_by_space */ CHAR_MAX,
90*820c1a8dSHiroo HAYASHI /* int_curr_symbol */ "",
91*820c1a8dSHiroo HAYASHI /* int_frac_digits */ CHAR_MAX,
92*820c1a8dSHiroo HAYASHI /* int_p_cs_precedes */ CHAR_MAX,
93*820c1a8dSHiroo HAYASHI /* int_p_sign_posn */ CHAR_MAX,
94*820c1a8dSHiroo HAYASHI /* int_p_sep_by_space */ CHAR_MAX,
95*820c1a8dSHiroo HAYASHI /* int_n_cs_precedes */ CHAR_MAX,
96*820c1a8dSHiroo HAYASHI /* int_n_sign_posn */ CHAR_MAX,
97*820c1a8dSHiroo HAYASHI /* int_n_sep_by_space */ CHAR_MAX
98*820c1a8dSHiroo HAYASHI };
99*820c1a8dSHiroo HAYASHI
100*820c1a8dSHiroo HAYASHI return &result;
101*820c1a8dSHiroo HAYASHI }
102*820c1a8dSHiroo HAYASHI
103*820c1a8dSHiroo HAYASHI #endif
104