[PATCH 3/6] generated character data for libc/ctype
Thomas Preudhomme
thomas.preudhomme@foss.arm.com
Tue Mar 27 10:09:00 GMT 2018
Hi Thomas,
This patch appears to regress 3 tests in libstdc++:
22_locale/ctype/is/wchar_t/1.cc execution test
22_locale/ctype/scan/wchar_t/1.cc execution test
28_regex/traits/wchar_t/isctype.cc execution test
I believe the issue is due to ... (scroll down)
On 09/03/18 22:54, Thomas Wolff wrote:
[SNIP]
> diff --git a/newlib/libc/ctype/iswupper_l.c b/newlib/libc/ctype/iswupper_l.c
> index 2555cd0..7ce8b5e
> --- a/newlib/libc/ctype/iswupper_l.c
> +++ b/newlib/libc/ctype/iswupper_l.c
> @@ -1,10 +1,20 @@
> +/* Modified (m) 2017 Thomas Wolff: revise Unicode and locale/wchar handling */
> #include <_ansi.h>
> +#include <ctype.h>
> #include <wctype.h>
> +#include "local.h"
> +#include "categories.h"
>
> int
> iswupper_l (wint_t c, struct __locale_t *locale)
> {
> - /* We're using a locale-independent representation of upper/lower case
> - based on Unicode data. Thus, the locale doesn't matter. */
> - return towlower (c) != c;
> +#ifdef _MB_CAPABLE
> + c = _jp2uc_l (c, locale);
> + // The wide-character class "upper" contains at least those characters wc
> + // which are equal to towupper(wc) and different from towlower(wc).
> + enum category cat = category (c);
> + return cat == CAT_Lu || (cat == CAT_LC && towupper (c) == c);
> +#else
> + return c < 0x100 ? islower (c) : 0;
> +#endif /* _MB_CAPABLE */
> }
This change. Shouldn't is call isupper instead of islower? Or perhaps !islower?
I've tried with isupper and it makes the tests mentionned above pass.
Best regards,
Thomas
More information about the Newlib
mailing list