#include <stdbool.h>
#ifndef REGTEST
#include <uchar.h>
+#include <_PDCLIB_encoding.h>
static bool latin1toc32(
- char32_t **restrict p_outbuf,
- size_t *restrict p_outsz,
- const char **restrict p_inbuf,
- size_t *restrict p_insz,
- mbstate_t *restrict p_ps
+ 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_ps
)
{
while(*p_outsz && *p_insz) {
unsigned char c = **p_inbuf;
- **p_outbuf = c;
+
+ if(p_outbuf) {
+ **p_outbuf = c;
+ (*p_outbuf)++;
+ }
(*p_inbuf)++;
- (*p_outbuf)++;
(*p_insz)--;
(*p_outsz)--;
}
}
static bool c32tolatin1(
- char **restrict p_outbuf,
- size_t *restrict p_outsz,
- const char32_t **restrict p_inbuf,
- size_t *restrict p_insz,
- mbstate_t *restrict p_ps
+ 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_ps
)
{
while(*p_outsz && *p_insz) {
char32_t c = **p_inbuf;
if(c > 255)
return false;
- **p_outbuf = c;
+
+ if(p_outbuf) {
+ **p_outbuf = c;
+ (*p_outbuf)++;
+ }
(*p_inbuf)++;
- (*p_outbuf)++;
(*p_insz)--;
(*p_outsz)--;
}
return true;
}
+
+struct _PDCLIB_charcodec _PDCLIB_latin1_codec = {
+ .__mbstoc32s = latin1toc32,
+ .__c32stombs = c32tolatin1,
+ .__mb_max = 1,
+};
+
#endif
#ifdef TEST