xref: /netbsd/distrib/utils/libhack/multibyte.c (revision 6550d01e)
1 /*      $NetBSD: multibyte.c,v 1.4 2008/07/29 13:46:16 tnozaki 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 <wchar.h>
10 
11 size_t
12 mbrtowc(wchar_t *wc, const char *str, size_t max_sz, mbstate_t *ps)
13 {
14 	return str == NULL || (*wc = (unsigned char)*str) == 0 ? 0 : 1;
15 }
16 
17 size_t
18 wcrtomb(char *str, wchar_t wc, mbstate_t *ps)
19 {
20     *str = wc & 0xFF;
21     return 1;
22 }
23 
24 int
25 wctob(wint_t x)
26 {
27 	return x;
28 }
29 
30 wint_t
31 btowc(int x) {
32 	return x;
33 }
34 
35 size_t
36 mbrlen(const char * __restrict p, size_t l, mbstate_t * __restrict v)
37 {
38 	size_t i;
39 	for (i = 0; i < l; i++)
40 		if (p[i] == '\0')
41 			return i;
42 	return l;
43 }
44 
45 int
46 mbsinit(const mbstate_t *s)
47 {
48 	return 0;
49 }
50 
51 size_t
52 mbsrtowcs(wchar_t * __restrict pwcs, const char ** __restrict s, size_t n,
53     mbstate_t * __restrict ps)
54 {
55 	const char *p;
56 	wchar_t *d;
57 	size_t count;
58 
59 	for (p = *s, d = pwcs, count = 0;
60 		count <= n;
61 		count++, d++, p++)
62 	{
63 		if (mbrtowc(d, p, 1, ps) == 0)
64 			break;
65 	}
66 	return count;
67 }
68 
69 size_t
70 wcsrtombs(char * __restrict s, const wchar_t ** __restrict pwcs, size_t n,
71     mbstate_t * __restrict ps)
72 {
73 	char *d;
74 	const wchar_t *p;
75 	size_t count;
76 
77 	for (p = *pwcs, d = s, count = 0;
78 		count <= n && *p != 0;
79 		count++, d++, p++)
80 	{
81 		wcrtomb(d, *p, ps);
82 	}
83 	*d = 0;
84 	return count;
85 }
86