From beaaf574bfe6cb503269970fc53ebeacf63eae57 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 31 Oct 2000 06:06:35 +0000 Subject: [PATCH] Update. * locale/localeinfo.h (enum value_type): Add wstring, wstringarray, and wstringlist. * locale/categories.def: Mark wide char strings as wstring or stringarray. * locale/programs/locale.c (show_info): Handle wstring, wstringarray, and wstringlist. Print keywords only if there is real output. Reported by Chen Xiangyang . * sysdeps/sparc/fpu/bits/mathinline.h: Add __THROW where necessary. Patch by Ben Collins . --- ChangeLog | 11 ++++ locale/categories.def | 98 ++++++++++++++--------------- locale/localeinfo.h | 5 +- locale/programs/locale.c | 33 +++++++--- sysdeps/sparc/fpu/bits/mathinline.h | 13 ++-- 5 files changed, 95 insertions(+), 65 deletions(-) diff --git a/ChangeLog b/ChangeLog index 78e5d31bb2..9846fd4de2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2000-10-30 Ulrich Drepper + * locale/localeinfo.h (enum value_type): Add wstring, wstringarray, + and wstringlist. + * locale/categories.def: Mark wide char strings as wstring or + stringarray. + * locale/programs/locale.c (show_info): Handle wstring, wstringarray, + and wstringlist. Print keywords only if there is real output. + Reported by Chen Xiangyang . + + * sysdeps/sparc/fpu/bits/mathinline.h: Add __THROW where necessary. + Patch by Ben Collins . + * stdio-common/Makefile (tests): Add tst-fmemopen. * stdio-common/tst-fmemopen.c: New file. Test case by Ben Collins . diff --git a/locale/categories.def b/locale/categories.def index 561cae98f0..c5ef6dc802 100644 --- a/locale/categories.def +++ b/locale/categories.def @@ -44,19 +44,19 @@ DEFINE_CATEGORY ( DEFINE_ELEMENT (_NL_COLLATE_NRULES, "collate-nrules", std, word) DEFINE_ELEMENT (_NL_COLLATE_RULESETS, "collate-rulesets", std, string) - DEFINE_ELEMENT (_NL_COLLATE_TABLEMB, "collate-tablemb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_WEIGHTMB, "collate-weightmb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_EXTRAMB, "collate-extramb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_INDIRECTMB, "collate-indirectmb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_TABLEWC, "collate-tablewc", std, string) - DEFINE_ELEMENT (_NL_COLLATE_WEIGHTWC, "collate-weightwc", std, string) - DEFINE_ELEMENT (_NL_COLLATE_EXTRAWC, "collate-extrawc", std, string) - DEFINE_ELEMENT (_NL_COLLATE_INDIRECTWC, "collate-indirectwc", std, string) + DEFINE_ELEMENT (_NL_COLLATE_TABLEMB, "collate-tablemb", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_WEIGHTMB, "collate-weightmb", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_EXTRAMB, "collate-extramb", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_INDIRECTMB, "collate-indirectmb", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_TABLEWC, "collate-tablewc", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_WEIGHTWC, "collate-weightwc", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_EXTRAWC, "collate-extrawc", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_INDIRECTWC, "collate-indirectwc", std, wstring) DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_SIZEMB, "collate-symb-hash-sizemb", std, word) - DEFINE_ELEMENT (_NL_COLLATE_SYMB_TABLEMB, "collate-symb-tablemb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_SYMB_EXTRAMB, "collate-symb-extramb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_COLLSEQMB, "collate-collseqmb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_COLLSEQWC, "collate-collseqwc", std, string) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_TABLEMB, "collate-symb-tablemb", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_EXTRAMB, "collate-symb-extramb", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_COLLSEQMB, "collate-collseqmb", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_COLLSEQWC, "collate-collseqwc", std, wstring) ), NO_POSTLOAD) @@ -67,17 +67,17 @@ DEFINE_CATEGORY ( LC_CTYPE, "LC_CTYPE", ( - DEFINE_ELEMENT (_NL_CTYPE_CLASS, "ctype-class", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOUPPER, "ctype-toupper", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOLOWER, "ctype-tolower", std, string) - DEFINE_ELEMENT (_NL_CTYPE_CLASS32, "ctype-class32", std, string) + DEFINE_ELEMENT (_NL_CTYPE_CLASS, "ctype-class", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_TOUPPER, "ctype-toupper", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_TOLOWER, "ctype-tolower", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_CLASS32, "ctype-class32", std, wstring) DEFINE_ELEMENT (_NL_CTYPE_CLASS_NAMES, "ctype-class-names", std, stringlist) DEFINE_ELEMENT (_NL_CTYPE_MAP_NAMES, "ctype-map-names", std, stringlist) DEFINE_ELEMENT (_NL_CTYPE_WIDTH, "ctype-width", std, bytearray) DEFINE_ELEMENT (_NL_CTYPE_MB_CUR_MAX, "ctype-mb-cur-max", std, word) DEFINE_ELEMENT (_NL_CTYPE_CODESET_NAME, "charmap", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOUPPER32, "ctype-toupper32", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOLOWER32, "ctype-tolower32", std, string) + DEFINE_ELEMENT (_NL_CTYPE_TOUPPER32, "ctype-toupper32", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_TOLOWER32, "ctype-tolower32", std, wstring) DEFINE_ELEMENT (_NL_CTYPE_CLASS_OFFSET, "ctype-class-offset", std, word) DEFINE_ELEMENT (_NL_CTYPE_MAP_OFFSET, "ctype-map-offset", std, word) DEFINE_ELEMENT (_NL_CTYPE_INDIGITS_MB_LEN, "ctype-indigits_mb-len", std, word) @@ -92,16 +92,16 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_CTYPE_INDIGITS8_MB, "ctype-indigits8_mb", std, string) DEFINE_ELEMENT (_NL_CTYPE_INDIGITS9_MB, "ctype-indigits9_mb", std, string) DEFINE_ELEMENT (_NL_CTYPE_INDIGITS_WC_LEN, "ctype-indigits_wc-len", std, word) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS0_WC, "ctype-indigits0_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS1_WC, "ctype-indigits1_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS2_WC, "ctype-indigits2_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS3_WC, "ctype-indigits3_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS4_WC, "ctype-indigits4_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS5_WC, "ctype-indigits5_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS6_WC, "ctype-indigits6_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS7_WC, "ctype-indigits7_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS8_WC, "ctype-indigits8_wc", std, string) - DEFINE_ELEMENT (_NL_CTYPE_INDIGITS9_WC, "ctype-indigits9_wc", std, string) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS0_WC, "ctype-indigits0_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS1_WC, "ctype-indigits1_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS2_WC, "ctype-indigits2_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS3_WC, "ctype-indigits3_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS4_WC, "ctype-indigits4_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS5_WC, "ctype-indigits5_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS6_WC, "ctype-indigits6_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS7_WC, "ctype-indigits7_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS8_WC, "ctype-indigits8_wc", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_INDIGITS9_WC, "ctype-indigits9_wc", std, wstring) DEFINE_ELEMENT (_NL_CTYPE_OUTDIGIT0_MB, "ctype-outdigit0_mb", std, string) DEFINE_ELEMENT (_NL_CTYPE_OUTDIGIT1_MB, "ctype-outdigit1_mb", std, string) DEFINE_ELEMENT (_NL_CTYPE_OUTDIGIT2_MB, "ctype-outdigit2_mb", std, string) @@ -123,12 +123,12 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_CTYPE_OUTDIGIT8_WC, "ctype-outdigit8_wc", std, word) DEFINE_ELEMENT (_NL_CTYPE_OUTDIGIT9_WC, "ctype-outdigit9_wc", std, word) DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_TAB_SIZE, "ctype-translit-tab-size", std, word) - DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_FROM_IDX, "ctype-translit-from-idx", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_FROM_TBL, "ctype-translit-from-tbl", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_TO_IDX, "ctype-translit-to-idx", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_TO_TBL, "ctype-translit-to-tbl", std, string) + DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_FROM_IDX, "ctype-translit-from-idx", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_FROM_TBL, "ctype-translit-from-tbl", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_TO_IDX, "ctype-translit-to-idx", std, wstring) + DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_TO_TBL, "ctype-translit-to-tbl", std, wstring) DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_DEFAULT_MISSING_LEN, "ctype-translit-default-missing-len", std, word) - DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_DEFAULT_MISSING, "ctype-translit-default-missing", std, string) + DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_DEFAULT_MISSING, "ctype-translit-default-missing", std, wstring) DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_IGNORE_LEN, "ctype-translit-ignore-len", std, word) DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_IGNORE, "ctype-translit-ignore", std, string) ), _nl_postload_ctype) @@ -214,25 +214,25 @@ DEFINE_CATEGORY DEFINE_ELEMENT (ERA, "era", opt, stringarray) DEFINE_ELEMENT (ERA_YEAR, "era_year", opt, string) DEFINE_ELEMENT (ERA_D_FMT, "era_d_fmt", opt, string) - DEFINE_ELEMENT (ALT_DIGITS, "alt_digits", opt, stringarray, 0, 100) + DEFINE_ELEMENT (ALT_DIGITS, "alt_digits", opt, stringlist, 100, 100) DEFINE_ELEMENT (ERA_D_T_FMT, "era_d_t_fmt", opt, string) DEFINE_ELEMENT (ERA_T_FMT, "era_t_fmt", opt, string) DEFINE_ELEMENT (_NL_TIME_ERA_NUM_ENTRIES, "time-era-num-entries", opt, word) DEFINE_ELEMENT (_NL_TIME_ERA_ENTRIES, "time-era-entries", opt, string) - DEFINE_ELEMENT (_NL_WABDAY_1, "wide-abday", std, stringarray, 7, 7) - DEFINE_ELEMENT (_NL_WDAY_1, "wide-day", std, stringarray, 7, 7) - DEFINE_ELEMENT (_NL_WABMON_1, "wide-abmon", std, stringarray, 12, 12) - DEFINE_ELEMENT (_NL_WMON_1, "wide-mon", std, stringarray, 12, 12) - DEFINE_ELEMENT (_NL_WAM_STR, "wide-am_pm", std, stringarray, 2, 2) - DEFINE_ELEMENT (_NL_WD_T_FMT, "wide-d_t_fmt", std, string) - DEFINE_ELEMENT (_NL_WD_FMT, "wide-d_fmt", std, string) - DEFINE_ELEMENT (_NL_WT_FMT, "wide-t_fmt", std, string) - DEFINE_ELEMENT (_NL_WT_FMT_AMPM, "wide-t_fmt_ampm", std, string) - DEFINE_ELEMENT (_NL_WERA_YEAR, "wide-era_year", opt, string) - DEFINE_ELEMENT (_NL_WERA_D_FMT, "wide-era_d_fmt", opt, string) - DEFINE_ELEMENT (_NL_WALT_DIGITS, "wide-alt_digits", opt, stringarray, 0, 100) - DEFINE_ELEMENT (_NL_WERA_D_T_FMT, "wide-era_d_t_fmt", opt, string) - DEFINE_ELEMENT (_NL_WERA_T_FMT, "wide-era_t_fmt", opt, string) + DEFINE_ELEMENT (_NL_WABDAY_1, "wide-abday", std, wstringarray, 7, 7) + DEFINE_ELEMENT (_NL_WDAY_1, "wide-day", std, wstringarray, 7, 7) + DEFINE_ELEMENT (_NL_WABMON_1, "wide-abmon", std, wstringarray, 12, 12) + DEFINE_ELEMENT (_NL_WMON_1, "wide-mon", std, wstringarray, 12, 12) + DEFINE_ELEMENT (_NL_WAM_STR, "wide-am_pm", std, wstringarray, 2, 2) + DEFINE_ELEMENT (_NL_WD_T_FMT, "wide-d_t_fmt", std, wstring) + DEFINE_ELEMENT (_NL_WD_FMT, "wide-d_fmt", std, wstring) + DEFINE_ELEMENT (_NL_WT_FMT, "wide-t_fmt", std, wstring) + DEFINE_ELEMENT (_NL_WT_FMT_AMPM, "wide-t_fmt_ampm", std, wstring) + DEFINE_ELEMENT (_NL_WERA_YEAR, "wide-era_year", opt, wstring) + DEFINE_ELEMENT (_NL_WERA_D_FMT, "wide-era_d_fmt", opt, wstring) + DEFINE_ELEMENT (_NL_WALT_DIGITS, "wide-alt_digits", opt, wstringlist, 1000, 100) + DEFINE_ELEMENT (_NL_WERA_D_T_FMT, "wide-era_d_t_fmt", opt, wstring) + DEFINE_ELEMENT (_NL_WERA_T_FMT, "wide-era_t_fmt", opt, wstring) DEFINE_ELEMENT (_NL_TIME_WEEK_NDAYS, "week-ndays", std, byte) DEFINE_ELEMENT (_NL_TIME_WEEK_1STDAY, "week-1stday", std, word) DEFINE_ELEMENT (_NL_TIME_WEEK_1STWEEK, "week-1stweek", std, byte) @@ -241,7 +241,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_TIME_CAL_DIRECTION, "cal_direction", std, byte) DEFINE_ELEMENT (_NL_TIME_TIMEZONE, "timezone", std, string) DEFINE_ELEMENT (_DATE_FMT, "date_fmt", opt, string) - DEFINE_ELEMENT (_NL_W_DATE_FMT, "wide-date_fmt", opt, string) + DEFINE_ELEMENT (_NL_W_DATE_FMT, "wide-date_fmt", opt, wstring) ), _nl_postload_time) diff --git a/locale/localeinfo.h b/locale/localeinfo.h index 1a4fe6f543..984696e024 100644 --- a/locale/localeinfo.h +++ b/locale/localeinfo.h @@ -91,7 +91,10 @@ enum value_type bytearray, word, stringlist, - wordarray + wordarray, + wstring, + wstringarray, + wstringlist }; diff --git a/locale/programs/locale.c b/locale/programs/locale.c index 7a42f1e3a4..0b61467c1f 100644 --- a/locale/programs/locale.c +++ b/locale/programs/locale.c @@ -551,17 +551,15 @@ show_info (const char *name) void print_item (struct cat_item *item) { - if (show_keyword_name != 0) - printf ("%s=", item->name); - switch (item->value_type) { case string: if (show_keyword_name) - putchar ('"'); + printf ("%s=\"", item->name); print_escaped (nl_langinfo (item->item_id) ? : ""); if (show_keyword_name) putchar ('"'); + putchar ('\n'); break; case stringarray: { @@ -569,7 +567,7 @@ show_info (const char *name) const char *val; if (show_keyword_name) - putchar ('"'); + printf ("%s=\"", item->name); for (cnt = 0; cnt < item->max - 1; ++cnt) { @@ -585,6 +583,7 @@ show_info (const char *name) if (show_keyword_name) putchar ('"'); + putchar ('\n'); } break; case stringlist: @@ -592,6 +591,9 @@ show_info (const char *name) int first = 1; const char *val = nl_langinfo (item->item_id) ? : ""; + if (show_keyword_name) + printf ("%s=", item->name); + while (*val != '\0') { printf ("%s%s%s%s", first ? "" : ";", @@ -600,14 +602,19 @@ show_info (const char *name) val = strchr (val, '\0') + 1; first = 0; } + putchar ('\n'); } break; case byte: { const char *val = nl_langinfo (item->item_id); + if (show_keyword_name) + printf ("%s=", item->name); + if (val != NULL) printf ("%d", *val == CHAR_MAX ? -1 : *val); + putchar ('\n'); } break; case bytearray: @@ -615,6 +622,9 @@ show_info (const char *name) const char *val = nl_langinfo (item->item_id); int cnt = val ? strlen (val) : 0; + if (show_keyword_name) + printf ("%s=", item->name); + while (cnt > 1) { printf ("%d;", *val == CHAR_MAX ? -1 : *val); @@ -622,19 +632,26 @@ show_info (const char *name) ++val; } - printf ("%d", cnt == 0 || *val == CHAR_MAX ? -1 : *val); + printf ("%d\n", cnt == 0 || *val == CHAR_MAX ? -1 : *val); } break; case word: { unsigned int val = (unsigned int) (unsigned long int) nl_langinfo (item->item_id); - printf ("%d", val); + if (show_keyword_name) + printf ("%s=", item->name); + + printf ("%d\n", val); } break; + case wstring: + case wstringarray: + case wstringlist: + /* We don't print wide character information since the same + information is available in a multibyte string. */ default: } - putchar ('\n'); } for (cat_no = 0; cat_no < NCATEGORIES; ++cat_no) diff --git a/sysdeps/sparc/fpu/bits/mathinline.h b/sysdeps/sparc/fpu/bits/mathinline.h index 50e296d9b4..daf9273795 100644 --- a/sysdeps/sparc/fpu/bits/mathinline.h +++ b/sysdeps/sparc/fpu/bits/mathinline.h @@ -100,11 +100,10 @@ /* The gcc, version 2.7 or below, has problems with all this inlining code. So disable it for this version of the compiler. */ - -# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 7)) +# if __GNUC_PREREQ (2, 8) /* Test for negative number. Used in the signbit() macro. */ __MATH_INLINE int -__signbitf (float __x) +__signbitf (float __x) __THROW { __extension__ union { float __f; int __i; } __u = { __f: __x }; return __u.__i < 0; @@ -113,14 +112,14 @@ __signbitf (float __x) #if __WORDSIZE == 32 __MATH_INLINE int -__signbit (double __x) +__signbit (double __x) __THROW { __extension__ union { double __d; int __i[2]; } __u = { __d: __x }; return __u.__i[0] < 0; } __MATH_INLINE int -__signbitl (long double __x) +__signbitl (long double __x) __THROW { return __signbit ((double)__x); } @@ -128,14 +127,14 @@ __signbitl (long double __x) #else /* sparc64 */ __MATH_INLINE int -__signbit (double __x) +__signbit (double __x) __THROW { __extension__ union { double __d; long __i; } __u = { __d: __x }; return __u.__i < 0; } __MATH_INLINE int -__signbitl (long double __x) +__signbitl (long double __x) __THROW { __extension__ union { long double __l; long __i[2]; } __u = { __l: __x }; return __u.__i[0] < 0;