xref: /netbsd-src/distrib/utils/libhack/multibyte.c (revision 8b0f9554ff8762542c4defc4f70e1eb76fb508fa)
1 /*      $NetBSD: multibyte.c,v 1.2 2007/05/29 17:46:44 he Exp $      */
2 
3 /*
4  * Ignore all multibyte sequences, removes all the citrus code.
5  * Probably only used by vfprintf() when parsing the format string.
6  */
7 
8 #include <wchar.h>
9 
10 size_t
11 mbrtowc(wchar_t *wc, const char *str, size_t max_sz, mbstate_t *ps)
12 {
13 	return (*wc = *str) == 0 ? 0 : 1;
14 }
15 
16 size_t
17 wcrtomb(char *str, wchar_t wc, mbstate_t *ps)
18 {
19     *str = wc;
20     return 1;
21 }
22 
23 int
24 wctob(wint_t x)
25 {
26 	return x;
27 }
28 
29 wint_t
30 btowc(int x) {
31 	return x;
32 }
33 
34 size_t
35 mbrlen(const char * __restrict p, size_t l, mbstate_t * __restrict v)
36 {
37 	size_t i;
38 	for (i = 0; i < l; i++)
39 		if (p[i] == '\0')
40 			return i;
41 	return l;
42 }
43 
44 int
45 mbsinit(const mbstate_t *s)
46 {
47 	return 0;
48 }
49 
50 size_t
51 mbsrtowcs(wchar_t * __restrict pwcs, const char ** __restrict s, size_t n,
52     mbstate_t * __restrict ps)
53 {
54 	const char *p;
55 	wchar_t *d;
56 	size_t count;
57 
58 	for (p = *s, d = pwcs, count = 0;
59 		count <= n;
60 		count++, d++, p++)
61 	{
62 		if (mbrtowc(d, p, 1, ps) == 0)
63 			break;
64 	}
65 	return count;
66 }
67 
68 size_t
69 wcsrtombs(char * __restrict s, const wchar_t ** __restrict pwcs, size_t n,
70     mbstate_t * __restrict ps)
71 {
72 	char *d;
73 	const wchar_t *p;
74 	size_t count;
75 
76 	for (p = *pwcs, d = s, count = 0;
77 		count <= n && *p != 0;
78 		count++, d++, p++)
79 	{
80 		wcrtomb(d, *p, ps);
81 	}
82 	*d = 0;
83 	return count;
84 }
85