Deleted Added
sdiff udiff text old ( 128089 ) new ( 128155 )
full compact
1/*-
2 * Copyright (c) 2004 Tim J. Robbins. All rights reserved.
3 * Copyright (c) 2003 David Xu <davidxu@freebsd.org>
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 12 unchanged lines hidden (view full) ---

21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#include <sys/param.h>
29__FBSDID("$FreeBSD: head/lib/libc/locale/gb2312.c 128089 2004-04-10 14:36:57Z davidxu $");
30
31#include <runetype.h>
32#include <stdlib.h>
33#include <string.h>
34#include <wchar.h>
35
36extern size_t (*__mbrtowc)(wchar_t * __restrict, const char * __restrict,
37 size_t, mbstate_t * __restrict);
38extern int (*__mbsinit)(const mbstate_t *);

--- 58 unchanged lines hidden (view full) ---

97{
98 _GB2312State *gs;
99 wchar_t wc;
100 int i, len, ocount;
101 size_t ncopy;
102
103 gs = (_GB2312State *)ps;
104
105 if (s == NULL) {
106 s = "";
107 n = 1;
108 pwc = NULL;
109 }
110
111 ncopy = MIN(MIN(n, MB_CUR_MAX), sizeof(gs->bytes) - gs->count);
112 memcpy(gs->bytes + gs->count, s, ncopy);

--- 10 unchanged lines hidden (view full) ---

123 wc = (wc << 8) | (unsigned char)*s++;
124 if (pwc != NULL)
125 *pwc = wc;
126 gs->count = 0;
127 return (wc == L'\0' ? 0 : len - ocount);
128}
129
130size_t
131_GB2312_wcrtomb(char * __restrict s, wchar_t wc,
132 mbstate_t * __restrict ps __unused)
133{
134
135 if (s == NULL)
136 /* Reset to initial shift state (no-op) */
137 return (1);
138 if (wc & 0x8000) {
139 *s++ = (wc >> 8) & 0xff;
140 *s = wc & 0xff;
141 return (2);
142 }
143 *s = wc & 0xff;
144 return (1);
145}