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