+
+ /* UTF-16 variants; same as above except optional.
+ *
+ * If not provided, _PDCLib will internally synthesize on top of the UCS-4
+ * variants above, albeit at a performance cost.
+ */
+
+ _PDCLIB_bool (*__mbstoc16s)(
+ _PDCLIB_char16_t *_PDCLIB_restrict *_PDCLIB_restrict _P_outbuf,
+ _PDCLIB_size_t *_PDCLIB_restrict _P_outsz,
+ const char *_PDCLIB_restrict *_PDCLIB_restrict _P_inbuf,
+ _PDCLIB_size_t *_PDCLIB_restrict _P_insz,
+ _PDCLIB_mbstate_t *_PDCLIB_restrict _P_ps
+ );
+
+ _PDCLIB_bool (*__c16stombs)(
+ char *_PDCLIB_restrict *_PDCLIB_restrict _P_outbuf,
+ _PDCLIB_size_t *_PDCLIB_restrict _P_outsz,
+ const _PDCLIB_char16_t *_PDCLIB_restrict *_PDCLIB_restrict _P_inbuf,
+ _PDCLIB_size_t *_PDCLIB_restrict _P_insz,
+ _PDCLIB_mbstate_t *_PDCLIB_restrict _P_ps
+ );
+
+ size_t __mb_max;
+};
+
+/* mbstate _PendState values */
+enum {
+ /* Nothing pending; _PendChar ignored */
+ _PendClear = 0,
+
+ /* Process the character stored in _PendChar before reading the buffer
+ * passed for the conversion
+ */
+ _PendPrefix = 1,
+};
+
+/* XXX Defining these here is temporary - will move to xlocale in future */
+size_t mbrtoc16_l(
+ char16_t *_PDCLIB_restrict pc16,
+ const char *_PDCLIB_restrict s,
+ size_t n,
+ mbstate_t *_PDCLIB_restrict ps,
+_PDCLIB_locale_t _PDCLIB_restrict l);
+
+size_t c16rtomb_l(
+ char *_PDCLIB_restrict s,
+ char16_t c16,
+ mbstate_t *_PDCLIB_restrict ps,
+_PDCLIB_locale_t _PDCLIB_restrict l);
+
+size_t mbrtoc32_l(
+ char32_t *_PDCLIB_restrict pc32,
+ const char *_PDCLIB_restrict s,
+ size_t n,
+ mbstate_t *_PDCLIB_restrict ps,
+_PDCLIB_locale_t _PDCLIB_restrict l);
+
+size_t c32rtomb_l(
+ char *_PDCLIB_restrict s,
+ char32_t c32,
+ mbstate_t *_PDCLIB_restrict ps,
+_PDCLIB_locale_t _PDCLIB_restrict l);
+
+#define _PDCLIB_WCHAR_ENCODING_UTF16 16
+#define _PDCLIB_WCHAR_ENCODING_UCS4 32
+
+#if !defined(_PDCLIB_WCHAR_ENCODING)
+ #define _PDCLIB_WCHAR_ENCODING 0
+#endif
+
+#if _PDCLIB_WCHAR_ENCODING == _PDCLIB_WCHAR_ENCODING_UTF16
+ #define _PDCLIB_mbrtocwc_l mbrtoc16_l
+ #define _PDCLIB_mbrtocwc mbrtoc16
+ #define _PDCLIB_cwcrtomb_l c16rtomb_l
+ #define _PDCLIB_cwcrtomb c16rtomb
+#elif _PDCLIB_WCHAR_ENCODING == _PDCLIB_WCHAR_ENCODING_UCS4
+ #define _PDCLIB_mbrtocwc_l mbrtoc32_l
+ #define _PDCLIB_mbrtocwc mbrtoc32
+ #define _PDCLIB_cwcrtomb_l c32rtomb_l
+ #define _PDCLIB_cwcrtomb c32rtomb
+#else
+ #error _PDCLIB_WCHAR_ENCODING not defined correctly
+ #error Define to one of _PDCLIB_WCHAR_ENCODING_UCS4 or _PDCLIB_WCHAR_ENCODING_UTF16
+#endif