X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=opt%2Fbasecodecs%2F_PDCLIB_latin1.c;h=5961a443d7e46319bf812980d7cad4eecb5e4246;hp=73844f417b6aa32587cf5f1e03346d6330d0e0e1;hb=276f7e69f80ac53bfb5da5cc24072dd393485106;hpb=a24c23ae6091f92a5662fd8b9edc5bdcbb711a5c diff --git a/opt/basecodecs/_PDCLIB_latin1.c b/opt/basecodecs/_PDCLIB_latin1.c index 73844f4..5961a44 100644 --- a/opt/basecodecs/_PDCLIB_latin1.c +++ b/opt/basecodecs/_PDCLIB_latin1.c @@ -7,21 +7,28 @@ #include #ifndef REGTEST #include +#include <_PDCLIB_encoding.h> + +static bool latin1_mbsinit( const mbstate_t *ps ) +{ return 1; } 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)--; } @@ -29,26 +36,37 @@ static bool latin1toc32( } 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; } + +const struct _PDCLIB_charcodec_t _PDCLIB_latin1_codec = { + .__mbsinit = latin1_mbsinit, + .__mbstoc32s = latin1toc32, + .__c32stombs = c32tolatin1, + .__mb_max = 1, +}; + #endif #ifdef TEST