* strfuncs.cc (__sjis_wctomb): Special handling for characters which

differ between SJIS and Windows codepage 932, if charset is "SJIS".
	(__sjis_mbtowc): Ditto.
	(_jis_wctomb): Remove.
	(__jis_mbtowc): Remove.
This commit is contained in:
Corinna Vinschen 2010-01-23 16:43:17 +00:00
parent b0466b3702
commit 6b121156cd
2 changed files with 36 additions and 17 deletions

View File

@ -1,3 +1,11 @@
2010-01-23 Corinna Vinschen <corinna@vinschen.de>
* strfuncs.cc (__sjis_wctomb): Special handling for characters which
differ between SJIS and Windows codepage 932, if charset is "SJIS".
(__sjis_mbtowc): Ditto.
(_jis_wctomb): Remove.
(__jis_mbtowc): Remove.
2010-01-23 Corinna Vinschen <corinna@vinschen.de> 2010-01-23 Corinna Vinschen <corinna@vinschen.de>
* nlsfuncs.cc (wcsxfrm): Call LCMapStringW with LCMAP_BYTEREV flag to * nlsfuncs.cc (wcsxfrm): Call LCMapStringW with LCMAP_BYTEREV flag to

View File

@ -108,15 +108,24 @@ extern "C" int
__sjis_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset, __sjis_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset,
mbstate_t *state) mbstate_t *state)
{ {
return __db_wctomb (r,s, wchar, 932); if (*charset == 'S')
}
extern "C" int
__jis_wctomb (struct _reent *r, char *s, wchar_t wchar, const char *charset,
mbstate_t *state)
{ {
/* FIXME: See comment at start of file. */ /* SJIS is not exactly CP932. Two ASCII code points are converted
return __ascii_wctomb (r, s, wchar, charset, state); differently. */
if (wchar == L'\x00a5') /* SJIS has Yen sign in place of Backslash */
{
if (s)
*s = '\x5c';
return 1;
}
else if (wchar == L'\x203e') /* SJIS has Overline in place of Tilde */
{
if (s)
*s = '\x7e';
return 1;
}
}
return __db_wctomb (r,s, wchar, 932);
} }
extern "C" int extern "C" int
@ -243,15 +252,17 @@ extern "C" int
__sjis_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n, __sjis_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
const char *charset, mbstate_t *state) const char *charset, mbstate_t *state)
{ {
return __db_mbtowc (r, pwc, s, n, 932, state); int ret = __db_mbtowc (r, pwc, s, n, 932, state);
} if (*charset == 'S' && pwc && ret == 1)
extern "C" int
__jis_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
const char *charset, mbstate_t *state)
{ {
/* FIXME: See comment at start of file. */ /* CP932 is not exactly SJIS. Two ASCII code points are converted
return __ascii_mbtowc (r, pwc, s, n, charset, state); differently. */
if (*s == '\x5c') /* SJIS has Yen sign in place of Backslash */
*pwc = L'\x00a5';
else if (*s == '\x7e') /* SJIS has Overline in place of Tilde */
*pwc = L'\x203e';
}
return ret;
} }
extern "C" int extern "C" int