summaryrefslogtreecommitdiffstats
path: root/lib/libc/locale/gb2312.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/locale/gb2312.c')
-rw-r--r--lib/libc/locale/gb2312.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/libc/locale/gb2312.c b/lib/libc/locale/gb2312.c
index 5fbc07d..032a3e2 100644
--- a/lib/libc/locale/gb2312.c
+++ b/lib/libc/locale/gb2312.c
@@ -1,4 +1,6 @@
/*-
+ * Copyright 2013 Garrett D'Amore <garrett@damore.org>
+ * Copyright 2010 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2004 Tim J. Robbins. All rights reserved.
* Copyright (c) 2003 David Xu <davidxu@freebsd.org>
* All rights reserved.
@@ -45,6 +47,13 @@ static size_t _GB2312_mbrtowc(wchar_t * __restrict, const char * __restrict,
static int _GB2312_mbsinit(const mbstate_t *);
static size_t _GB2312_wcrtomb(char * __restrict, wchar_t,
mbstate_t * __restrict);
+static size_t _GB2312_mbsnrtowcs(wchar_t * __restrict,
+ const char ** __restrict, size_t, size_t,
+ mbstate_t * __restrict);
+static size_t _GB2312_wcsnrtombs(char * __restrict,
+ const wchar_t ** __restrict, size_t, size_t,
+ mbstate_t * __restrict);
+
typedef struct {
int count;
@@ -59,6 +68,8 @@ _GB2312_init(struct xlocale_ctype *l, _RuneLocale *rl)
l->__mbrtowc = _GB2312_mbrtowc;
l->__wcrtomb = _GB2312_wcrtomb;
l->__mbsinit = _GB2312_mbsinit;
+ l->__mbsnrtowcs = _GB2312_mbsnrtowcs;
+ l->__wcsnrtombs = _GB2312_wcsnrtombs;
l->__mb_cur_max = 2;
l->__mb_sb_limit = 128;
return (0);
@@ -71,7 +82,7 @@ _GB2312_mbsinit(const mbstate_t *ps)
return (ps == NULL || ((const _GB2312State *)ps)->count == 0);
}
-static __inline int
+static int
_GB2312_check(const char *str, size_t n)
{
const u_char *s = (const u_char *)str;
@@ -90,7 +101,7 @@ _GB2312_check(const char *str, size_t n)
} else if (s[0] & 0x80) {
/* Invalid multibyte sequence */
return (-1);
- }
+ }
return (1);
}
@@ -158,3 +169,19 @@ _GB2312_wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps)
*s = wc & 0xff;
return (1);
}
+
+static size_t
+_GB2312_mbsnrtowcs(wchar_t * __restrict dst,
+ const char ** __restrict src, size_t nms, size_t len,
+ mbstate_t * __restrict ps)
+{
+ return (__mbsnrtowcs_std(dst, src, nms, len, ps, _GB2312_mbrtowc));
+}
+
+static size_t
+_GB2312_wcsnrtombs(char * __restrict dst,
+ const wchar_t ** __restrict src, size_t nwc, size_t len,
+ mbstate_t * __restrict ps)
+{
+ return (__wcsnrtombs_std(dst, src, nwc, len, ps, _GB2312_wcrtomb));
+}
OpenPOWER on IntegriCloud