Path: blob/master/waterbox/libc/functions/uchar/mbrtoc32.c
2 views
/* size_t mbrtoc32( char32_t *, const char *, size_t, mbstate_t * )12This file is part of the Public Domain C Library (PDCLib).3Permission is granted to use, modify, and / or redistribute at will.4*/56#ifndef REGTEST7#include <uchar.h>8#include <errno.h>9#include <stdint.h>10#include <assert.h>11#include "_PDCLIB_encoding.h"12#include "_PDCLIB_locale.h"1314size_t mbrtoc32_l(15char32_t *restrict pc32,16const char *restrict s,17size_t n,18mbstate_t *restrict ps,19locale_t restrict l20)21{22size_t dstlen = 1;23size_t nr = n;2425if(l->_Codec->__mbstoc32s(&pc32, &dstlen, &s, &nr, ps)) {26// Successful conversion27if(dstlen == 0) {28// A character was output29if(nr == n) {30// The output character resulted entirely from stored state31// With UTF-32, this shouldn't be possible?32return (size_t) -3;33} else if(pc32[-1] == 0) {34// Was null character35return 0;36} else {37// Count of processed characters38return n - nr;39}40} else {41assert(nr == 0 && "Must have processed whole input");42return (size_t) -2;43}44} else {45// Failed conversion46errno = EILSEQ;47return (size_t) -1;48}49}5051size_t mbrtoc32(52char32_t *restrict pc32,53const char *restrict s,54size_t n,55mbstate_t *restrict ps56)57{58return mbrtoc32_l(pc32, s, n, ps, _PDCLIB_threadlocale());59}6061#endif6263#ifdef TEST64#include "_PDCLIB_test.h"6566int main( void )67{68TESTCASE( NO_TESTDRIVER );69return TEST_RESULTS;70}71#endif727374