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 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?) 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
