multibyte.c revision 1.7 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