#include <stdint.h>
#include <uchar.h>
#include <assert.h>
+#include <_PDCLIB_encoding.h>
/* Use of the mbstate:
*
* _St32[1] is the character accumulated so far
*/
+static bool utf8_mbsinit( const mbstate_t *p_s )
+{ return p_s->_StUC[0] == 0; }
+
enum {
DecStart = 0,
_PDCLIB_UNDEFINED(accum); \
state = DecStart; \
} while(0)
+
#define CHECK_CONTINUATION \
do { if((c & 0xC0) != 0x80) return false; } while(0)
static bool utf8toc32(
- char32_t **restrict p_outbuf,
- size_t *restrict p_outsz,
- const char **restrict p_inbuf,
- size_t *restrict p_insz,
- mbstate_t *restrict p_s
+ char32_t *restrict *restrict p_outbuf,
+ size_t *restrict p_outsz,
+ const char *restrict *restrict p_inbuf,
+ size_t *restrict p_insz,
+ mbstate_t *restrict p_s
)
{
START_CONVERSION
};
static bool c32toutf8(
- char **restrict p_outbuf,
- size_t *restrict p_outsz,
- const char32_t **restrict p_inbuf,
- size_t *restrict p_insz,
- mbstate_t *restrict p_s
+ char *restrict *restrict p_outbuf,
+ size_t *restrict p_outsz,
+ const char32_t *restrict *restrict p_inbuf,
+ size_t *restrict p_insz,
+ mbstate_t *restrict p_s
)
{
START_CONVERSION
END_CONVERSION;
}
-_PDCLIB_charcodec _PDCLIB_utf8_codec = {
+const struct _PDCLIB_charcodec _PDCLIB_utf8_codec = {
+ .__mbsinit = utf8_mbsinit,
.__mbstoc32s = utf8toc32,
.__c32stombs = c32toutf8,
+ .__mb_max = 4,
};
#endif