Denys Vlasenko wrote:
> On Friday 13 February 2009 11:54, Carmelo AMOROSO wrote:
>> rhabarber1848 wrote:
>>> Denys Vlasenko wrote:
>>>
>>>> But if "anyone" is a patched version of gcc and patch
>>>> simply uses uclibc internals (which were leaking through
>>>> non-sanitized headers) instead of using public interface,
>>>> that is a badly written patch.
>>> Hi,
>>>
>>> we already had the same discussion on the bug tracker:
>>> https://bugs.busybox.net/show_bug.cgi?id=53#c7
>>>
>>> I also need to have libstdc++ support from gcc, in my case even gcc-3.4.6,
>>> where the above mentioned patches where backported to:
>>> http://cvs.tuxbox.org/cgi-bin/viewcvs.cgi/tuxbox/cdk/Patches/gcc-uclibc.diff?view=markup
>>>
>>> To "fix" the problem I copied libc/sysdeps/linux/common/bits/uClibc_locale.h
>>> from the uClibc distribution to /include/bits in the target dir after
>>> installing uClibc, I know its a hack but it works ;)
>>>
>>> I would be happy to see a real solution to this problem, but unfortunately I
>>> can not help coding here.
>>>
>>> Greetings, rhabarber1848
>>>
>> My working proposal if for removing _LIBC from within uclibc_locale.h.
>> Ready to commit. Let me know.
>
> I do not like the idea.
>
> How about rewriting offending patch?
>
> http://cvs.tuxbox.org/cgi-bin/viewcvs.cgi/tuxbox/cdk/Patches/gcc-uclibc.diff?view=markup
>
> The problem seems to be here:
>
> +#ifdef __UCLIBC__
> +# ifdef __UCLIBC_HAS_XLOCALE__
> + _M_data->_M_decimal_point = __cloc->decimal_point_wc;
> + _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
> +# else
> + _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
> + _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
> +# endif
> +#else
> + union __s_and_w { const char *__s; unsigned int __w; } __u;
> + __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
> + _M_data->_M_decimal_point = static_cast<wchar_t>(__u.__w);
> +
> + __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
> + _M_data->_M_thousands_sep = static_cast<wchar_t>(__u.__w);
> +#endif
>
>
Hi Denys,
> Notice that it has "if not defined __UCLIBC__" branch
> which is (supposedly) working, and uses only nl_langinfo_l,
> which is a public interface.
>
> (a) does it compile if the entire #if is reduced to its #else branch?
> (b) does it work correctly? (and do we really care that much?)
>
the ifdef __UCLIBC__ has been added extactly to make it working
woth uclibc instead of glibc, so it needs to access to the
global_locale data as well it needs to have its data structure visible,
so I do not expect that the else branch will work for uclibc.
carmelo
> If nl_langinfo_l is not available with !__UCLIBC_HAS_XLOCALE__,
> then there is localeconv() ("man 7 localeconv").
>
> --
> vda
> _______________________________________________
> uClibc mailing list
> [email protected]
> http://lists.busybox.net/mailman/listinfo/uclibc
>
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc