summaryrefslogtreecommitdiffstats
path: root/mbyte.c
diff options
context:
space:
mode:
authorThomas Roessler <roessler@does-not-exist.org>2000-07-24 07:47:32 +0000
committerThomas Roessler <roessler@does-not-exist.org>2000-07-24 07:47:32 +0000
commitfc3998e9c1df14f4ef4052680a178255c34795bf (patch)
tree1630c19597702318fe5895afbc1ee453e0b6a204 /mbyte.c
parent1917c86ff611465be93eacd1ab3899dfafae4b63 (diff)
Replace wctomb and mbtowc with wcrtomb and mbrtowc. From TAKIZAWA
Takashi <taki@luna.email.ne.jp>, with small changes from Edmund Grimley Evans.
Diffstat (limited to 'mbyte.c')
-rw-r--r--mbyte.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/mbyte.c b/mbyte.c
index 124febcb..ba098a14 100644
--- a/mbyte.c
+++ b/mbyte.c
@@ -20,10 +20,24 @@ void mutt_set_charset (char *charset)
#ifndef HAVE_WC_FUNCS
-int wctomb (char *s, wchar_t wc)
+size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
{
+ static mbstate_t mbstate;
+
+ if (!ps)
+ ps = &mbstate;
+
if (!s)
- return 0;
+ {
+ memset (ps, 0, sizeof (*ps));
+ return 1;
+ }
+ if (!wc)
+ {
+ memset (ps, 0, sizeof (*ps));
+ *s = 0;
+ return 1;
+ }
if (Charset_is_utf8)
return mutt_wctoutf8 (s, wc);
else if (wc < 0x100)
@@ -32,19 +46,10 @@ int wctomb (char *s, wchar_t wc)
return 1;
}
else
- return -1;
-}
-
-int mbtowc (wchar_t *pwc, const char *s, size_t n)
-{
- mbstate_t state;
- int result;
- memset(&state, 0, sizeof(state));
- result = mbrtowc (pwc, s, n, &state);
- if (result >= 0)
- return result;
- else
- return -1;
+ {
+ errno = EILSEQ;
+ return (size_t)(-1);
+ }
}
size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)