version 1.12.34.1, 2017/07/14 15:53:07 |
version 1.12.34.2, 2017/07/21 20:22:29 |
|
|
#define _ENCODING_IS_STATE_DEPENDENT 0 |
#define _ENCODING_IS_STATE_DEPENDENT 0 |
#define _STATE_NEEDS_EXPLICIT_INIT(_ps_) 0 |
#define _STATE_NEEDS_EXPLICIT_INIT(_ps_) 0 |
|
|
|
#include "citrus_u2k_template.h" |
|
|
static __inline void |
static __inline void |
/*ARGSUSED*/ |
/*ARGSUSED*/ |
Line 88 _citrus_UTF1632_init_state(_UTF1632Encod |
|
Line 89 _citrus_UTF1632_init_state(_UTF1632Encod |
|
} |
} |
|
|
static int |
static int |
_citrus_UTF1632_mbrtowc_priv(_UTF1632EncodingInfo *ei, wchar_t *pwc, |
_citrus_UTF1632_mbrtowc_priv(_UTF1632EncodingInfo *ei, wchar_ucs4_t *pwc, |
const char **s, size_t n, _UTF1632State *psenc, |
const char **s, size_t n, _UTF1632State *psenc, |
size_t *nresult) |
size_t *nresult) |
{ |
{ |
int chlenbak, endian, needlen; |
int chlenbak, endian, needlen; |
wchar_t wc; |
wchar_kuten_t wc; |
size_t result; |
size_t result; |
const char *s0; |
const char *s0; |
|
|
|
|
switch (endian) { |
switch (endian) { |
case _ENDIAN_LITTLE: |
case _ENDIAN_LITTLE: |
wc = (psenc->ch[0] | |
wc = (psenc->ch[0] | |
((wchar_t)psenc->ch[1] << 8)); |
((wchar_kuten_t)psenc->ch[1] << 8)); |
break; |
break; |
case _ENDIAN_BIG: |
case _ENDIAN_BIG: |
wc = (psenc->ch[1] | |
wc = (psenc->ch[1] | |
((wchar_t)psenc->ch[0] << 8)); |
((wchar_kuten_t)psenc->ch[0] << 8)); |
break; |
break; |
default: |
default: |
goto ilseq; |
goto ilseq; |
|
|
if (psenc->ch[3]<0xDC || psenc->ch[3]>0xDF) |
if (psenc->ch[3]<0xDC || psenc->ch[3]>0xDF) |
goto ilseq; |
goto ilseq; |
wc |= psenc->ch[2]; |
wc |= psenc->ch[2]; |
wc |= (wchar_t)(psenc->ch[3] & 3) << 8; |
wc |= (wchar_kuten_t)(psenc->ch[3] & 3) << 8; |
break; |
break; |
case _ENDIAN_BIG: |
case _ENDIAN_BIG: |
if (psenc->ch[2]<0xDC || psenc->ch[2]>0xDF) |
if (psenc->ch[2]<0xDC || psenc->ch[2]>0xDF) |
goto ilseq; |
goto ilseq; |
wc |= psenc->ch[3]; |
wc |= psenc->ch[3]; |
wc |= (wchar_t)(psenc->ch[2] & 3) << 8; |
wc |= (wchar_kuten_t)(psenc->ch[2] & 3) << 8; |
break; |
break; |
default: |
default: |
goto ilseq; |
goto ilseq; |
|
|
switch (endian) { |
switch (endian) { |
case _ENDIAN_LITTLE: |
case _ENDIAN_LITTLE: |
wc = (psenc->ch[0] | |
wc = (psenc->ch[0] | |
((wchar_t)psenc->ch[1] << 8) | |
((wchar_kuten_t)psenc->ch[1] << 8) | |
((wchar_t)psenc->ch[2] << 16) | |
((wchar_kuten_t)psenc->ch[2] << 16) | |
((wchar_t)psenc->ch[3] << 24)); |
((wchar_kuten_t)psenc->ch[3] << 24)); |
break; |
break; |
case _ENDIAN_BIG: |
case _ENDIAN_BIG: |
wc = (psenc->ch[3] | |
wc = (psenc->ch[3] | |
((wchar_t)psenc->ch[2] << 8) | |
((wchar_kuten_t)psenc->ch[2] << 8) | |
((wchar_t)psenc->ch[1] << 16) | |
((wchar_kuten_t)psenc->ch[1] << 16) | |
((wchar_t)psenc->ch[0] << 24)); |
((wchar_kuten_t)psenc->ch[0] << 24)); |
break; |
break; |
default: |
default: |
goto ilseq; |
goto ilseq; |
|
|
goto ilseq; |
goto ilseq; |
} |
} |
|
|
|
_citrus_UTF1632_kt2ucs(ei, pwc, wc); |
*pwc = wc; |
|
psenc->chlen = 0; |
psenc->chlen = 0; |
*nresult = result; |
*nresult = result; |
*s = s0; |
*s = s0; |
|
|
|
|
static int |
static int |
_citrus_UTF1632_wcrtomb_priv(_UTF1632EncodingInfo *ei, char *s, size_t n, |
_citrus_UTF1632_wcrtomb_priv(_UTF1632EncodingInfo *ei, char *s, size_t n, |
wchar_t wc, _UTF1632State *psenc, |
wchar_ucs4_t wc, _UTF1632State *psenc, |
size_t *nresult) |
size_t *nresult) |
{ |
{ |
wchar_t wc2; |
wchar_kuten_t wc2; |
static const char _bom[4] = { |
static const char _bom[4] = { |
#if BYTE_ORDER == BIG_ENDIAN |
#if BYTE_ORDER == BIG_ENDIAN |
0x00, 0x00, 0xFE, 0xFF, |
0x00, 0x00, 0xFE, 0xFF, |
Line 265 _citrus_UTF1632_wcrtomb_priv(_UTF1632Enc |
|
Line 265 _citrus_UTF1632_wcrtomb_priv(_UTF1632Enc |
|
_DIAGASSERT(nresult != 0); |
_DIAGASSERT(nresult != 0); |
_DIAGASSERT(s != NULL); |
_DIAGASSERT(s != NULL); |
|
|
|
_citrus_UTF1632_ucs2kt(ei, &wc, wc); |
|
|
cnt = (size_t)0; |
cnt = (size_t)0; |
if (psenc->current_endian == _ENDIAN_UNKNOWN) { |
if (psenc->current_endian == _ENDIAN_UNKNOWN) { |
if ((ei->mode & _MODE_FORCE_ENDIAN) == 0) { |
if ((ei->mode & _MODE_FORCE_ENDIAN) == 0) { |
|
|
_citrus_UTF1632_stdenc_wctocs(struct _citrus_stdenc *ce, |
_citrus_UTF1632_stdenc_wctocs(struct _citrus_stdenc *ce, |
_csid_t * __restrict csid, |
_csid_t * __restrict csid, |
_index_t * __restrict idx, |
_index_t * __restrict idx, |
wchar_t wc) |
wchar_kuten_t wc) |
{ |
{ |
|
|
_DIAGASSERT(csid != NULL && idx != NULL); |
_DIAGASSERT(csid != NULL && idx != NULL); |
Line 446 _citrus_UTF1632_stdenc_wctocs(struct _ci |
|
Line 448 _citrus_UTF1632_stdenc_wctocs(struct _ci |
|
static int |
static int |
/*ARGSUSED*/ |
/*ARGSUSED*/ |
_citrus_UTF1632_stdenc_cstowc(struct _citrus_stdenc *ce, |
_citrus_UTF1632_stdenc_cstowc(struct _citrus_stdenc *ce, |
wchar_t * __restrict wc, |
wchar_kuten_t * __restrict wc, |
_csid_t csid, _index_t idx) |
_csid_t csid, _index_t idx) |
{ |
{ |
|
|
Line 455 _citrus_UTF1632_stdenc_cstowc(struct _ci |
|
Line 457 _citrus_UTF1632_stdenc_cstowc(struct _ci |
|
if (csid != 0) |
if (csid != 0) |
return (EILSEQ); |
return (EILSEQ); |
|
|
*wc = (wchar_t)idx; |
*wc = (wchar_kuten_t)idx; |
|
|
return (0); |
return (0); |
} |
} |