xref: /illumos-gate/usr/src/man/man3c/mbrtoc16.3c (revision d9e771569d5985de069c7db374affb027207ac43)
1eda3ef2dSRobert Mustacchi.\"
2eda3ef2dSRobert Mustacchi.\" This file and its contents are supplied under the terms of the
3eda3ef2dSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
4eda3ef2dSRobert Mustacchi.\" You may only use this file in accordance with the terms of version
5eda3ef2dSRobert Mustacchi.\" 1.0 of the CDDL.
6eda3ef2dSRobert Mustacchi.\"
7eda3ef2dSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
8eda3ef2dSRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
9eda3ef2dSRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
10eda3ef2dSRobert Mustacchi.\"
11eda3ef2dSRobert Mustacchi.\"
12eda3ef2dSRobert Mustacchi.\" Copyright 2020 Robert Mustacchi
13*d9e77156SBill Sommerfeld.\" Copyright 2023 Bill Sommerfeld
14eda3ef2dSRobert Mustacchi.\"
15*d9e77156SBill Sommerfeld.Dd June 5, 2023
16eda3ef2dSRobert Mustacchi.Dt MBRTOC16 3C
17eda3ef2dSRobert Mustacchi.Os
18eda3ef2dSRobert Mustacchi.Sh NAME
19eda3ef2dSRobert Mustacchi.Nm mbrtoc16 ,
20eda3ef2dSRobert Mustacchi.Nm mbrtoc32 ,
21eda3ef2dSRobert Mustacchi.Nm mbrtowc ,
22eda3ef2dSRobert Mustacchi.Nm mbrtowc_l
23eda3ef2dSRobert Mustacchi.Nd convert characters to wide characters
24eda3ef2dSRobert Mustacchi.Sh SYNOPSIS
25eda3ef2dSRobert Mustacchi.In wchar.h
26eda3ef2dSRobert Mustacchi.Ft size_t
27eda3ef2dSRobert Mustacchi.Fo mbrtowc
28eda3ef2dSRobert Mustacchi.Fa "wchar_t *restrict pwc"
29eda3ef2dSRobert Mustacchi.Fa "const char *restrict str"
30eda3ef2dSRobert Mustacchi.Fa "size_t len"
31eda3ef2dSRobert Mustacchi.Fa "mstate_t *restrict ps"
32eda3ef2dSRobert Mustacchi.Fc
33eda3ef2dSRobert Mustacchi.In wchar.h
34eda3ef2dSRobert Mustacchi.In xlocale.h
35eda3ef2dSRobert Mustacchi.Ft size_t
36*d9e77156SBill Sommerfeld.Fo mbrtowc_l
37eda3ef2dSRobert Mustacchi.Fa "wchar_t *restrict pwc"
38eda3ef2dSRobert Mustacchi.Fa "const char *restrict str"
39eda3ef2dSRobert Mustacchi.Fa "size_t len"
40eda3ef2dSRobert Mustacchi.Fa "mstate_t *restrict ps"
41eda3ef2dSRobert Mustacchi.Fa "locale_t loc"
42eda3ef2dSRobert Mustacchi.Fc
43eda3ef2dSRobert Mustacchi.In uchar.h
44eda3ef2dSRobert Mustacchi.Ft size_t
45eda3ef2dSRobert Mustacchi.Fo mbrtoc16
46eda3ef2dSRobert Mustacchi.Fa "char16_t *restrict p16c"
47eda3ef2dSRobert Mustacchi.Fa "const char *restrict str"
48eda3ef2dSRobert Mustacchi.Fa "size_t len"
49eda3ef2dSRobert Mustacchi.Fa "mbstate_t *restrict ps"
50eda3ef2dSRobert Mustacchi.Fc
51eda3ef2dSRobert Mustacchi.Ft size_t
52eda3ef2dSRobert Mustacchi.Fo mbrtoc32
53eda3ef2dSRobert Mustacchi.Fa "char32_t *restrict p32c"
54eda3ef2dSRobert Mustacchi.Fa "const char *restrict str"
55eda3ef2dSRobert Mustacchi.Fa "size_t len"
56eda3ef2dSRobert Mustacchi.Fa "mbstate_t *restrict ps"
57eda3ef2dSRobert Mustacchi.Fc
58eda3ef2dSRobert Mustacchi.Sh DESCRIPTION
59eda3ef2dSRobert MustacchiThe
60eda3ef2dSRobert Mustacchi.Fn mbrtoc16 ,
61eda3ef2dSRobert Mustacchi.Fn mbrtoc32 ,
62eda3ef2dSRobert Mustacchi.Fn mbrtowc ,
63eda3ef2dSRobert Mustacchiand
64eda3ef2dSRobert Mustacchi.Fn mbrtowc_l
65eda3ef2dSRobert Mustacchifunctions convert character sequences, which may contain multi-byte
66eda3ef2dSRobert Mustacchicharacters, into different character formats.
67eda3ef2dSRobert MustacchiThe functions work in the following formats:
68eda3ef2dSRobert Mustacchi.Bl -tag -width mbrtowc_l
69eda3ef2dSRobert Mustacchi.It Fn mbrtoc16
70eda3ef2dSRobert MustacchiA UTF-16 code sequence, where every code point is represented by one or
71eda3ef2dSRobert Mustacchitwo
72eda3ef2dSRobert Mustacchi.Vt char16_t .
73eda3ef2dSRobert MustacchiThe UTF-16 encoding will encode certain Unicode code points as a pair of
74eda3ef2dSRobert Mustacchitwo 16-bit code sequences, commonly referred to as a surrogate pair.
75eda3ef2dSRobert Mustacchi.It Fn mbrtoc32
76eda3ef2dSRobert MustacchiA UTF-32 code sequence, where every code point is represented by a
77eda3ef2dSRobert Mustacchisingle
78eda3ef2dSRobert Mustacchi.Vt char32_t .
79eda3ef2dSRobert Mustacchi.It Fn mbrtowc , Fn mbrtowc_l
80eda3ef2dSRobert MustacchiWide characters, being a 32-bit value where every code point is
81eda3ef2dSRobert Mustacchirepresented by a single
82eda3ef2dSRobert Mustacchi.Vt wchar_t .
83eda3ef2dSRobert MustacchiWhile the
84eda3ef2dSRobert Mustacchi.Vt wchar_t
85eda3ef2dSRobert Mustacchiand
86eda3ef2dSRobert Mustacchi.Vt char32_t
87eda3ef2dSRobert Mustacchiare different types, in this implementation, they are similar encodings.
88eda3ef2dSRobert Mustacchi.El
89eda3ef2dSRobert Mustacchi.Pp
90eda3ef2dSRobert MustacchiThe functions consume up to
91eda3ef2dSRobert Mustacchi.Fa len
92eda3ef2dSRobert Mustacchicharacters from the string
93eda3ef2dSRobert Mustacchi.Fa str
94eda3ef2dSRobert Mustacchiand accumulate them in
95eda3ef2dSRobert Mustacchi.Fa ps
96eda3ef2dSRobert Mustacchiuntil a valid character is found, which is influenced by
97eda3ef2dSRobert Mustacchithe
98eda3ef2dSRobert Mustacchi.Dv LC_CTYPE
99eda3ef2dSRobert Mustacchicategory of the current locale.
100eda3ef2dSRobert MustacchiFor example, in the
101eda3ef2dSRobert Mustacchi.Sy C
102eda3ef2dSRobert Mustacchilocale, only ASCII characters are recognized, while in a
103eda3ef2dSRobert Mustacchi.Sy UTF-8
104eda3ef2dSRobert Mustacchibased locale like
105eda3ef2dSRobert Mustacchi.Sy en_US.UTF-8 ,
106eda3ef2dSRobert MustacchiUTF-8 multi-byte character sequences that represent Unicode code points
107eda3ef2dSRobert Mustacchiare recognized.
108eda3ef2dSRobert MustacchiThe
109eda3ef2dSRobert Mustacchi.Fn mbrtowc_l
110eda3ef2dSRobert Mustacchifunction uses the locale passed in
111eda3ef2dSRobert Mustacchi.Fa loc
112eda3ef2dSRobert Mustacchirather than the locale of the current thread.
113eda3ef2dSRobert Mustacchi.Pp
114eda3ef2dSRobert MustacchiWhen a valid character sequence has been found, it is converted to
115eda3ef2dSRobert Mustacchieither a 16-bit character sequence for
116eda3ef2dSRobert Mustacchi.Fn mbrtoc16
117eda3ef2dSRobert Mustacchior a 32-bit character sequence for
118eda3ef2dSRobert Mustacchi.Fn mbrtoc32
119eda3ef2dSRobert Mustacchiand will be stored in
120eda3ef2dSRobert Mustacchi.Fa p16c
121eda3ef2dSRobert Mustacchiand
122eda3ef2dSRobert Mustacchi.Fa p32c
123eda3ef2dSRobert Mustacchirespectively.
124eda3ef2dSRobert Mustacchi.Pp
125eda3ef2dSRobert MustacchiThe
126eda3ef2dSRobert Mustacchi.Fa ps
127eda3ef2dSRobert Mustacchiargument represents a multi-byte conversion state which can be used
128eda3ef2dSRobert Mustacchiacross multiple calls to a given function
129eda3ef2dSRobert Mustacchi.Pq but not mixed between functions .
130eda3ef2dSRobert MustacchiThese allow for characters to be consumed from subsequent buffers, e.g.
131eda3ef2dSRobert Mustacchidifferent values of
132eda3ef2dSRobert Mustacchi.Fa str .
133eda3ef2dSRobert MustacchiThe functions may be called from multiple threads as long as they use
134eda3ef2dSRobert Mustacchiunique values for
135eda3ef2dSRobert Mustacchi.Fa ps .
136eda3ef2dSRobert MustacchiIf
137eda3ef2dSRobert Mustacchi.Fa ps
138eda3ef2dSRobert Mustacchiis
139eda3ef2dSRobert Mustacchi.Dv NULL ,
140eda3ef2dSRobert Mustacchithen a function-specific buffer will be used for the conversion state;
141eda3ef2dSRobert Mustacchihowever, this is stored between all threads and its use is not
142eda3ef2dSRobert Mustacchirecommended.
143eda3ef2dSRobert Mustacchi.Pp
144eda3ef2dSRobert MustacchiWhen using these functions, more than one character may be output for a
145eda3ef2dSRobert Mustacchigiven set of consumed input characters.
146eda3ef2dSRobert MustacchiAn example of this is when a given code point is represented as a set of
147eda3ef2dSRobert Mustacchisurrogate pairs in UTF-16, which require two 16-bit characters to
148eda3ef2dSRobert Mustacchirepresent a code point.
149eda3ef2dSRobert MustacchiWhen this occurs, the functions return the special return value
150eda3ef2dSRobert Mustacchi.Sy -3 .
151eda3ef2dSRobert Mustacchi.Pp
152eda3ef2dSRobert MustacchiThe functions all have a special behavior when
153eda3ef2dSRobert Mustacchi.Dv NULL
154eda3ef2dSRobert Mustacchiis passed for
155eda3ef2dSRobert Mustacchi.Fa str .
156eda3ef2dSRobert MustacchiThey instead will treat it as though
157eda3ef2dSRobert Mustacchi.Fa pwc ,
158eda3ef2dSRobert Mustacchi.Fa p16c ,
159eda3ef2dSRobert Mustacchior
160eda3ef2dSRobert Mustacchi.Fa p32c
161eda3ef2dSRobert Mustacchiwere
162eda3ef2dSRobert Mustacchi.Dv NULL ,
163eda3ef2dSRobert Mustacchi.Fa str
164eda3ef2dSRobert Mustacchihad been passed as the empty string, "" and the length,
165eda3ef2dSRobert Mustacchi.Fa len ,
166eda3ef2dSRobert Mustacchiwould appear as the value 1.
167eda3ef2dSRobert MustacchiIn other words, the functions would be called as:
168eda3ef2dSRobert Mustacchi.Bd -literal -offset indent
169eda3ef2dSRobert Mustacchimbrtowc(NULL, "", 1, ps)
170eda3ef2dSRobert Mustacchimbrtowc_l(NULL, "", 1, ps)
171eda3ef2dSRobert Mustacchimbrtoc16(NULL, "", 1, ps)
172eda3ef2dSRobert Mustacchimbrtoc32(NULL, "", 1, ps)
173eda3ef2dSRobert Mustacchi.Ed
174eda3ef2dSRobert Mustacchi.Ss Locale Details
175eda3ef2dSRobert MustacchiNot all locales in the system are Unicode based locales.
176eda3ef2dSRobert MustacchiFor example, ISO 8859 family locales have code points with values that
177eda3ef2dSRobert Mustacchido not match their counterparts in Unicode.
178eda3ef2dSRobert MustacchiWhen using these functions with non-Unicode based locales, the code
179eda3ef2dSRobert Mustacchipoints returned will be those determined by the locale.
180eda3ef2dSRobert MustacchiThey will not be converted to the corresponding Unicode code point.
181eda3ef2dSRobert MustacchiFor example, if using the Euro sign in ISO 8859-15, these functions
182eda3ef2dSRobert Mustacchimight return the code point 0xa4 and not the Unicode value 0x20ac.
183eda3ef2dSRobert Mustacchi.Pp
184eda3ef2dSRobert MustacchiRegardless of the locale, the characters returned will be encoded as
185eda3ef2dSRobert Mustacchithough the code point were the corresponding value in Unicode.
186eda3ef2dSRobert MustacchiThis means that if a locale returns a value that would be a surrogate
187eda3ef2dSRobert Mustacchipair in the UTF-16 encoding, it will still be encoded as a UTF-16
188eda3ef2dSRobert Mustacchicharacter.
189eda3ef2dSRobert Mustacchi.Pp
190eda3ef2dSRobert MustacchiThis behavior of the
191eda3ef2dSRobert Mustacchi.Fn mbrtoc16
192eda3ef2dSRobert Mustacchiand
193eda3ef2dSRobert Mustacchi.Fn mbrtoc32
194eda3ef2dSRobert Mustacchifunctions should not be relied upon, is not portable, and subject to
195eda3ef2dSRobert Mustacchichange for non-Unicode locales.
196eda3ef2dSRobert Mustacchi.Sh RETURN VALUES
197eda3ef2dSRobert MustacchiThe
198eda3ef2dSRobert Mustacchi.Fn mbrtoc16 ,
199eda3ef2dSRobert Mustacchi.Fn mbrtoc32 ,
200eda3ef2dSRobert Mustacchi.Fn mbrtowc ,
201eda3ef2dSRobert Mustacchiand
202eda3ef2dSRobert Mustacchi.Fn mbrtowc_l
203eda3ef2dSRobert Mustacchifunctions return the following values:
204eda3ef2dSRobert Mustacchi.Bl -tag -width (size_t)-3
205eda3ef2dSRobert Mustacchi.It Sy 0
206eda3ef2dSRobert Mustacchi.Fa len
207eda3ef2dSRobert Mustacchior fewer bytes of
208eda3ef2dSRobert Mustacchi.Fa str
209eda3ef2dSRobert Mustacchiwere consumed and the null wide character was written into the wide
210eda3ef2dSRobert Mustacchicharacter buffer
211eda3ef2dSRobert Mustacchi.Po
212eda3ef2dSRobert Mustacchi.Fa pwc ,
213eda3ef2dSRobert Mustacchi.Fa p16c ,
214eda3ef2dSRobert Mustacchi.Fa p32c
215eda3ef2dSRobert Mustacchi.Pc .
216eda3ef2dSRobert Mustacchi.It Sy between 1 and len
217eda3ef2dSRobert MustacchiThe specified number of bytes were consumed and a single character was
218eda3ef2dSRobert Mustacchiwritten into the wide character buffer
219eda3ef2dSRobert Mustacchi.Po
220eda3ef2dSRobert Mustacchi.Fa pwc ,
221eda3ef2dSRobert Mustacchi.Fa p16c ,
222eda3ef2dSRobert Mustacchi.Fa p32c
223eda3ef2dSRobert Mustacchi.Pc .
224eda3ef2dSRobert Mustacchi.It Sy (size_t)-1
225eda3ef2dSRobert MustacchiAn encoding error has occurred.
226eda3ef2dSRobert MustacchiThe next
227eda3ef2dSRobert Mustacchi.Fa len
228eda3ef2dSRobert Mustacchibytes of
229eda3ef2dSRobert Mustacchi.Fa str
230eda3ef2dSRobert Mustacchido not contribute to a valid character.
231eda3ef2dSRobert Mustacchi.Va errno
232eda3ef2dSRobert Mustacchihas been set to
233eda3ef2dSRobert Mustacchi.Er EILSEQ .
234eda3ef2dSRobert MustacchiNo data was written into the wide character buffer
235eda3ef2dSRobert Mustacchi.Po
236eda3ef2dSRobert Mustacchi.Fa pwc ,
237eda3ef2dSRobert Mustacchi.Fa p16c ,
238eda3ef2dSRobert Mustacchi.Fa p32c
239eda3ef2dSRobert Mustacchi.Pc .
240eda3ef2dSRobert Mustacchi.It Sy (size_t)-2
241eda3ef2dSRobert Mustacchi.Fa len
242eda3ef2dSRobert Mustacchibytes of
243eda3ef2dSRobert Mustacchi.Fa str
244eda3ef2dSRobert Mustacchiwere consumed, but a complete multi-byte character sequence has not been
245eda3ef2dSRobert Mustacchifound and no data was written into the wide character buffer
246eda3ef2dSRobert Mustacchi.Po
247eda3ef2dSRobert Mustacchi.Fa pwc ,
248eda3ef2dSRobert Mustacchi.Fa p16c ,
249eda3ef2dSRobert Mustacchi.Fa p32c
250eda3ef2dSRobert Mustacchi.Pc .
251eda3ef2dSRobert Mustacchi.It Sy (size_t)-3
252eda3ef2dSRobert MustacchiA character has been written into the wide character buffer
253eda3ef2dSRobert Mustacchi.Po
254eda3ef2dSRobert Mustacchi.Fa pwc ,
255eda3ef2dSRobert Mustacchi.Fa p16c ,
256eda3ef2dSRobert Mustacchi.Fa p32c
257eda3ef2dSRobert Mustacchi.Pc .
258eda3ef2dSRobert MustacchiThis character was from a previous call (such as another part of a
259eda3ef2dSRobert MustacchiUTF-16 surrogate pair) and no input was consumed.
260eda3ef2dSRobert MustacchiThis is limited to the
261eda3ef2dSRobert Mustacchi.Fn mbrtoc16
262eda3ef2dSRobert Mustacchiand
263eda3ef2dSRobert Mustacchi.Fn mbrtoc32
264eda3ef2dSRobert Mustacchifunctions.
265eda3ef2dSRobert Mustacchi.El
266eda3ef2dSRobert Mustacchi.Sh EXAMPLES
267eda3ef2dSRobert Mustacchi.Sy Example 1
268eda3ef2dSRobert MustacchiUsing the
269eda3ef2dSRobert Mustacchi.Fn mbrtoc32
270eda3ef2dSRobert Mustacchifunction to convert a multibyte string.
271eda3ef2dSRobert Mustacchi.Bd -literal
272eda3ef2dSRobert Mustacchi#include <locale.h>
273eda3ef2dSRobert Mustacchi#include <stdlib.h>
274eda3ef2dSRobert Mustacchi#include <string.h>
275eda3ef2dSRobert Mustacchi#include <err.h>
276eda3ef2dSRobert Mustacchi#include <stdio.h>
277eda3ef2dSRobert Mustacchi#include <uchar.h>
278eda3ef2dSRobert Mustacchi
279eda3ef2dSRobert Mustacchiint
280eda3ef2dSRobert Mustacchimain(void)
281eda3ef2dSRobert Mustacchi{
282eda3ef2dSRobert Mustacchi	mbstate_t mbs;
283eda3ef2dSRobert Mustacchi	char32_t out;
284eda3ef2dSRobert Mustacchi	size_t ret;
285eda3ef2dSRobert Mustacchi	const char *uchar_str = "\exe5\ex85\ex89";
286eda3ef2dSRobert Mustacchi
287eda3ef2dSRobert Mustacchi	(void) memset(&mbs, 0, sizeof (mbs));
288eda3ef2dSRobert Mustacchi	(void) setlocale(LC_CTYPE, "en_US.UTF-8");
289eda3ef2dSRobert Mustacchi	ret = mbrtoc32(&out, uchar_str, strlen(uchar_str), &mbs);
290eda3ef2dSRobert Mustacchi	if (ret != strlen(uchar_str)) {
291eda3ef2dSRobert Mustacchi		errx(EXIT_FAILURE, "failed to convert string, got %zd",
292eda3ef2dSRobert Mustacchi		    ret);
293eda3ef2dSRobert Mustacchi	}
294eda3ef2dSRobert Mustacchi
295eda3ef2dSRobert Mustacchi	(void) printf("Converted %zu bytes into UTF-32 character "
296eda3ef2dSRobert Mustacchi	    "0x%x\n", ret, out);
297eda3ef2dSRobert Mustacchi	return (0);
298eda3ef2dSRobert Mustacchi}
299eda3ef2dSRobert Mustacchi.Ed
300eda3ef2dSRobert Mustacchi.Pp
301eda3ef2dSRobert MustacchiWhen compiled and run, this produces:
302eda3ef2dSRobert Mustacchi.Bd -literal -offset indent
303eda3ef2dSRobert Mustacchi$ ./a.out
304eda3ef2dSRobert MustacchiConverted 3 bytes into UTF-32 character 0x5149
305eda3ef2dSRobert Mustacchi.Ed
306eda3ef2dSRobert Mustacchi.Pp
307eda3ef2dSRobert Mustacchi.Sy Example 2
308eda3ef2dSRobert MustacchiHandling surrogate pairs from the
309eda3ef2dSRobert Mustacchi.Fn mbrtoc16
310eda3ef2dSRobert Mustacchifunction.
311eda3ef2dSRobert Mustacchi.Bd -literal
312eda3ef2dSRobert Mustacchi#include <locale.h>
313eda3ef2dSRobert Mustacchi#include <stdlib.h>
314eda3ef2dSRobert Mustacchi#include <string.h>
315eda3ef2dSRobert Mustacchi#include <err.h>
316eda3ef2dSRobert Mustacchi#include <stdio.h>
317eda3ef2dSRobert Mustacchi#include <uchar.h>
318eda3ef2dSRobert Mustacchi
319eda3ef2dSRobert Mustacchiint
320eda3ef2dSRobert Mustacchimain(void)
321eda3ef2dSRobert Mustacchi{
322eda3ef2dSRobert Mustacchi        mbstate_t mbs;
323eda3ef2dSRobert Mustacchi        char16_t first, second;
324eda3ef2dSRobert Mustacchi        size_t ret;
325eda3ef2dSRobert Mustacchi        const char *uchar_str = "\exf0\ex9f\ex92\exa9";
326eda3ef2dSRobert Mustacchi
32727920913SRobert Mustacchi        (void) memset(&mbs, 0, sizeof (mbs));
328eda3ef2dSRobert Mustacchi        (void) setlocale(LC_CTYPE, "en_US.UTF-8");
329eda3ef2dSRobert Mustacchi        ret = mbrtoc16(&first, uchar_str, strlen(uchar_str), &mbs);
330eda3ef2dSRobert Mustacchi        if (ret != strlen(uchar_str)) {
331eda3ef2dSRobert Mustacchi                errx(EXIT_FAILURE, "failed to convert string, got %zd",
332eda3ef2dSRobert Mustacchi                    ret);
333eda3ef2dSRobert Mustacchi        }
334eda3ef2dSRobert Mustacchi
335eda3ef2dSRobert Mustacchi        ret = mbrtoc16(&second, "", 0, &mbs);
336eda3ef2dSRobert Mustacchi        if (ret != (size_t)-3) {
337eda3ef2dSRobert Mustacchi                errx(EXIT_FAILURE, "didn't get second surrogate pair, "
338eda3ef2dSRobert Mustacchi                    "got %zd", ret);
339eda3ef2dSRobert Mustacchi        }
340eda3ef2dSRobert Mustacchi
341eda3ef2dSRobert Mustacchi        (void) printf("UTF-16 surrogates: 0x%x 0x%x\n", first, second);
342eda3ef2dSRobert Mustacchi        return (0);
343eda3ef2dSRobert Mustacchi}
344eda3ef2dSRobert Mustacchi.Ed
345eda3ef2dSRobert Mustacchi.Pp
346eda3ef2dSRobert MustacchiWhen compiled and run, this produces:
347eda3ef2dSRobert Mustacchi.Bd -literal -offset indent
348eda3ef2dSRobert Mustacchi$ ./a.out
349eda3ef2dSRobert MustacchiUTF-16 surrogates: 0xd83d 0xdca9
350eda3ef2dSRobert Mustacchi.Ed
351eda3ef2dSRobert Mustacchi.Sh ERRORS
352eda3ef2dSRobert MustacchiThe
353eda3ef2dSRobert Mustacchi.Fn mbrtoc16 ,
354eda3ef2dSRobert Mustacchi.Fn mbrtoc32 ,
355eda3ef2dSRobert Mustacchi.Fn mbrtowc ,
356eda3ef2dSRobert Mustacchiand
357eda3ef2dSRobert Mustacchi.Fn mbrtowc_l
358eda3ef2dSRobert Mustacchifunctions will fail if:
359eda3ef2dSRobert Mustacchi.Bl -tag -width Er
360eda3ef2dSRobert Mustacchi.It Er EINVAL
361eda3ef2dSRobert MustacchiThe conversion state in
362eda3ef2dSRobert Mustacchi.Fa ps
363eda3ef2dSRobert Mustacchiis invalid.
364eda3ef2dSRobert Mustacchi.It Er EILSEQ
365eda3ef2dSRobert MustacchiAn invalid character sequence has been detected.
366eda3ef2dSRobert Mustacchi.El
367eda3ef2dSRobert Mustacchi.Sh MT-LEVEL
368eda3ef2dSRobert MustacchiThe
369eda3ef2dSRobert Mustacchi.Fn mbrtoc16 ,
370eda3ef2dSRobert Mustacchi.Fn mbrtoc32 ,
371eda3ef2dSRobert Mustacchi.Fn mbrtowc ,
372eda3ef2dSRobert Mustacchiand
373eda3ef2dSRobert Mustacchi.Fn mbrtowc_l
374eda3ef2dSRobert Mustacchifunctions are
375eda3ef2dSRobert Mustacchi.Sy MT-Safe
376eda3ef2dSRobert Mustacchias long as different
377eda3ef2dSRobert Mustacchi.Vt mbstate_t
378eda3ef2dSRobert Mustacchistructures are passed in
379eda3ef2dSRobert Mustacchi.Fa ps .
380eda3ef2dSRobert MustacchiIf
381eda3ef2dSRobert Mustacchi.Fa ps
382eda3ef2dSRobert Mustacchiis
383eda3ef2dSRobert Mustacchi.Dv NULL
384eda3ef2dSRobert Mustacchior different threads use the same value for
385eda3ef2dSRobert Mustacchi.Fa ps ,
386eda3ef2dSRobert Mustacchithen the functions are
387eda3ef2dSRobert Mustacchi.Sy Unsafe .
388eda3ef2dSRobert Mustacchi.Sh INTERFACE STABILITY
389eda3ef2dSRobert Mustacchi.Sy Committed
390eda3ef2dSRobert Mustacchi.Sh SEE ALSO
391eda3ef2dSRobert Mustacchi.Xr c16rtomb 3C ,
392eda3ef2dSRobert Mustacchi.Xr c32rtomb 3C ,
393eda3ef2dSRobert Mustacchi.Xr newlocale 3C ,
394eda3ef2dSRobert Mustacchi.Xr setlocale 3C ,
395eda3ef2dSRobert Mustacchi.Xr uselocale 3C ,
396eda3ef2dSRobert Mustacchi.Xr wcrtomb 3C ,
397eda3ef2dSRobert Mustacchi.Xr uchar.h 3HEAD ,
398bbf21555SRichard Lowe.Xr environ 7
399