diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2010-04-28 09:59:37 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2010-04-28 09:59:37 +0000 |
commit | d47d5b850bed398357e7f05d8fef508be1bb7f51 (patch) | |
tree | 8571d6a5751c102c12b11c58261ee663e83d7fce /newlib/libc/locale/lnumeric.c | |
parent | 9b53b52a80f79a7746f51e2092b23dfab3d50c6f (diff) | |
download | cygnal-d47d5b850bed398357e7f05d8fef508be1bb7f51.tar.gz cygnal-d47d5b850bed398357e7f05d8fef508be1bb7f51.tar.bz2 cygnal-d47d5b850bed398357e7f05d8fef508be1bb7f51.zip |
Extend locale support to maintain wide char values of native strings
if __HAVE_LOCALE_INFO_EXTENDED__ is defined.
* libc/include/langinfo.h (enum __nl_item): New type. Define all
native values accessible through nl_langinfo. Define previously
existing POSIX-compatible values as macros as well.
* libc/include/stdlib.h (__mb_cur_max): Drop declaration.
(__locale_mb_cur_max): Declare.
(MB_CUR_MAX): Re-define calling __locale_mb_cur_max.
* libc/locale/Makefile.am (ELIX_SOURCES): Add lctype.c.
* libc/locale/Makefile.in: Regenerate.
* libc/locale/lctype.c: New file to define and load LC_CTYPE category.
* libc/locale/lctype.h: New file, matching header.
* libc/locale/lmessages.c (_C_messages_locale): Add default values for
wide char members.
(__messages_load_locale): Add _C_messages_locale in call to
__set_lc_messages_from_win.
* libc/locale/lmessages.h (struct lc_messages_T): Add wide char members.
* libc/locale/lmonetary.c (_C_monetary_locale): Add default values for
wide char members.
(__monetary_load_locale): Add _C_monetary_locale in call to
__set_lc_monetary_from_win.
* libc/locale/lmonetary.h (struct lc_monetary_T): Add wide char members.
Add numerical values for international currency formatting per
POSIX-1.2008, if __HAVE_LOCALE_INFO_EXTENDED__ is defined.
* libc/locale/lnumeric.c (_C_numeric_locale): Add default values for
wide char members.
(__numeric_load_locale): Add _C_numeric_locale in call to
__set_lc_numeric_from_win.
* libc/locale/lnumeric.h (struct lc_numeric_T): Add wide char members.
* libc/locale/locale.c (loadlocale): Return doing nothing if category
locale didn't change. Convert category if chain to switch statement.
Call __ctype_load_locale in LC_CTYPE case.
(__locale_charset): Add (but disable for now) returning codeset from
__get_current_ctype_locale.
(__locale_mb_cur_max): Add (but disable for now) returning mb_cur_max
from __get_current_ctype_locale.
(__locale_msgcharset): Add returning codeset from
__get_current_messages_locale.
(_localeconv_r): Accommodate int_XXX values.
* libc/locale/nl_langinfo.c (nl_ext): New array to define what is to
be returned for non-POSIX values.
(nl_Langinfo): Return correct codeset for each locale category. Return
extended values if __HAVE_LOCALE_INFO_EXTENDED__ is defined.
* libc/locale/timelocal.c (_C_time_locale): Add default values for
wide char members.
(__time_load_locale): Add _C_time_locale in call to
__set_lc_time_from_win.
* libc/locale/timelocal.h (struct lc_time_T): Add wide char members.
* libc/stdio/vfwprintf.c (_VFWPRINTF_R): Use wide char decimal point
and thousands_sep if __HAVE_LOCALE_INFO_EXTENDED__ is defined.
* libc/time/strftime.c: Rework to accommodate availability of wide char
strings in LC_TIME category if __HAVE_LOCALE_INFO_EXTENDED__ is defined.
Diffstat (limited to 'newlib/libc/locale/lnumeric.c')
-rw-r--r-- | newlib/libc/locale/lnumeric.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/newlib/libc/locale/lnumeric.c b/newlib/libc/locale/lnumeric.c index 81c0061ff..ae2447066 100644 --- a/newlib/libc/locale/lnumeric.c +++ b/newlib/libc/locale/lnumeric.c @@ -24,8 +24,6 @@ * SUCH DAMAGE. */ -#include <sys/cdefs.h> - #include <limits.h> #include "lnumeric.h" #include "ldpart.h" @@ -38,9 +36,14 @@ extern const char *__fix_locale_grouping_str(const char *); static char numempty[] = { CHAR_MAX, '\0' }; static const struct lc_numeric_T _C_numeric_locale = { - ".", /* decimal_point */ - "", /* thousands_sep */ - numempty /* grouping */ + ".", /* decimal_point */ + "", /* thousands_sep */ + numempty /* grouping */ +#ifdef __HAVE_LOCALE_INFO_EXTENDED__ + , "ASCII", /* codeset */ + L".", /* wdecimal_point */ + L"", /* wthousands_sep */ +#endif }; static struct lc_numeric_T _numeric_locale; @@ -54,12 +57,13 @@ __numeric_load_locale(const char *name , void *f_wctomb, const char *charset) #ifdef __CYGWIN__ extern int __set_lc_numeric_from_win (const char *, + const struct lc_numeric_T *, struct lc_numeric_T *, char **, void *, const char *); int old_numeric_using_locale = _numeric_using_locale; _numeric_using_locale = 0; - ret = __set_lc_numeric_from_win (name, &_numeric_locale, - &_numeric_locale_buf, + ret = __set_lc_numeric_from_win (name, &_C_numeric_locale, + &_numeric_locale, &_numeric_locale_buf, f_wctomb, charset); /* ret == -1: error, ret == 0: C/POSIX, ret > 0: valid */ if (ret < 0) |