2011/9/27 Ozkan Sezer <seze...@gmail.com>: > On Tue, Sep 27, 2011 at 3:48 PM, Ozkan Sezer <seze...@gmail.com> wrote: >> On Tue, Sep 27, 2011 at 2:01 PM, Ruben Van Boxem >> <vanboxem.ru...@gmail.com> wrote: >>> 2011/9/26 Kai Tietz <ktiet...@googlemail.com> >>>> >>>> 2011/9/26 Ruben Van Boxem <vanboxem.ru...@gmail.com>: >>>> > Why does mingw-w64 not have a uchar.h header file? There's only a few >>>> > typedefs and some functions (which can easily be implemented through the >>>> > Win32 API IMHO). >>>> > >>>> > See the draft proposal here: >>>> > http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf >>>> > >>>> > The reason I ask is because the C++11 standard mentions this header and >>>> > its >>>> > C++ counterpart <cuchar>. Although the functions aren't available in >>>> > msvcrt, >>>> > I'm sure I can come up with an implementation if necessary (based on >>>> > WideCharToMultiByte and some other code to get as far as utf32... hmm >>>> > I'll >>>> > have to think about that). For the UTF-32 bits there's code floating >>>> > around >>>> > all over the internet, like here: >>>> > http://bytes.com/topic/c/answers/517850-converting-utf-16-utf-32-a which >>>> > would definitely work with a bit of testing and refactoring. >>>> > >>>> > Please tell me what you think about this idea. >>>> > >>>> > Ruben >>>> >>>> Sounds interesting. WideCharToMultiByte/MultiByteToWideChar API could >>>> handle this. >>>> As we don't have here API-conflicts to msvcrt's API, I would give it a >>>> try. >>>> >>>> Patches are welcome for this. >>> >>> Attached is a simple implementation that falls back to C's wcrtomb and >>> mbrtowc for char16_t (should indirectly be a wchar_t), as these handle the >>> necessary error conditions already. >>> >>> The char32_t bits are manual bit checking. Each case is handled >>> individually, and the result is built up if all conditions are met. >>> >>> I copied and adapted a disclaimer and some more information from stdint.h. >>> The typedefs are not allowed for C++11, as these must be distinct types >>> (implemented in the compiler). Clang had this fixed in r117038, GCC in 4.4. >>> This made me think that ifdef __cplusplus was enough (GCC 4.4 is the first >>> real mingw-w64 capable GCC, and Clang is still quite far from usable IMHO). >>> >>> Ruben >> >> Something is clearly wrong with the gcc version checking: if you >> want to typedef when gcc < 4.4, that line in uchar.h should read >> || (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) >> ... I guess. >> >> There are also some other errors, I fixed partially. See attached. >> gcc44 compiles it. g++44 does _NOT_ compile it _unless_ I use >> -std=c++0x or gnu++0x >> >> Didn't inspect functions' code correctness >> >> -- >> O.S. >> > > Attached new ones with slightly better gcc check > > -- > O.S.
Patch looks fine to me. I would like to see here some testcases for the functions. At least for the USV 32 variant. Cheers, Kai ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public