xref: /netbsd-src/distrib/utils/libhack/multibyte.c (revision 6a493d6bc668897c91594964a732d38505b70cbb)
1 /*      $NetBSD: multibyte.c,v 1.5 2013/04/19 18:45:03 joerg 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  * And possibly from libcurses if compiled with HAVE_WCHAR.
7  */
8 
9 #include <stdlib.h>
10 #include <wchar.h>
11 
12 size_t
13 mbrtowc(wchar_t *wc, const char *str, size_t max_sz, mbstate_t *ps)
14 {
15 	return str == NULL || (*wc = (unsigned char)*str) == 0 ? 0 : 1;
16 }
17 
18 size_t
19 mbrtowc_l(wchar_t *wc, const char *str, size_t max_sz, mbstate_t *ps, locale_t loc)
20 {
21 	return mbrtowc(wc, str, max_sz, ps);
22 }
23 
24 size_t
25 wcrtomb(char *str, wchar_t wc, mbstate_t *ps)
26 {
27     *str = wc & 0xFF;
28     return 1;
29 }
30 
31 
32 size_t
33 wcrtomb_l(char *str, wchar_t wc, mbstate_t *ps, locale_t loc)
34 {
35 	return wcrtomb(str, wc, ps);
36 }
37 
38 int
39 wctob(wint_t x)
40 {
41 	return x;
42 }
43 
44 int
45 wctob_l(wint_t x, locale_t loc)
46 {
47 	return x;
48 }
49 
50 wint_t
51 btowc(int x)
52 {
53 	return x;
54 }
55 
56 wint_t
57 btowc_l(int x, locale_t loc)
58 {
59 	return x;
60 }
61 
62 size_t
63 mbrlen(const char * __restrict p, size_t l, mbstate_t * __restrict v)
64 {
65 	size_t i;
66 	for (i = 0; i < l; i++)
67 		if (p[i] == '\0')
68 			return i;
69 	return l;
70 }
71 
72 
73 size_t
74 mbrlen_l(const char * __restrict p, size_t l, mbstate_t * __restrict v,
75     locale_t loc)
76 {
77 	return mbrlen(p, l, v);
78 }
79 
80 int
81 mbsinit(const mbstate_t *s)
82 {
83 	return 0;
84 }
85 
86 size_t
87 mbsrtowcs(wchar_t * __restrict pwcs, const char ** __restrict s, size_t n,
88     mbstate_t * __restrict ps)
89 {
90 	const char *p;
91 	wchar_t *d;
92 	size_t count;
93 
94 	for (p = *s, d = pwcs, count = 0;
95 		count <= n;
96 		count++, d++, p++)
97 	{
98 		if (mbrtowc(d, p, 1, ps) == 0)
99 			break;
100 	}
101 	return count;
102 }
103 
104 
105 size_t
106 mbsrtowcs_l(wchar_t * __restrict pwcs, const char ** __restrict s, size_t n,
107     mbstate_t * __restrict ps, locale_t loc)
108 {
109 	return mbsrtowcs(pwcs, s, n, ps);
110 }
111 
112 size_t
113 wcsrtombs(char * __restrict s, const wchar_t ** __restrict pwcs, size_t n,
114     mbstate_t * __restrict ps)
115 {
116 	char *d;
117 	const wchar_t *p;
118 	size_t count;
119 
120 	for (p = *pwcs, d = s, count = 0;
121 		count <= n && *p != 0;
122 		count++, d++, p++)
123 	{
124 		wcrtomb(d, *p, ps);
125 	}
126 	*d = 0;
127 	return count;
128 }
129 
130 size_t
131 wcsrtombs_l(char * __restrict s, const wchar_t ** __restrict pwcs, size_t n,
132     mbstate_t * __restrict ps, locale_t loc)
133 {
134 	return wcsrtombs(s, pwcs, n, ps);
135 }
136 
137 size_t
138 _mb_cur_max_l(locale_t loc)
139 {
140 	return MB_CUR_MAX;
141 }
142