19a4a12bdSRobert Mustacchi.\" 29a4a12bdSRobert Mustacchi.\" This file and its contents are supplied under the terms of the 39a4a12bdSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0. 49a4a12bdSRobert Mustacchi.\" You may only use this file in accordance with the terms of version 59a4a12bdSRobert Mustacchi.\" 1.0 of the CDDL. 69a4a12bdSRobert Mustacchi.\" 79a4a12bdSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this 89a4a12bdSRobert Mustacchi.\" source. A copy of the CDDL is also available via the Internet at 99a4a12bdSRobert Mustacchi.\" http://www.illumos.org/license/CDDL. 109a4a12bdSRobert Mustacchi.\" 119a4a12bdSRobert Mustacchi.\" 129a4a12bdSRobert Mustacchi.\" Copyright 2020 Robert Mustacchi 139a4a12bdSRobert Mustacchi.\" 149a4a12bdSRobert Mustacchi.Dd April 23, 2020 159a4a12bdSRobert Mustacchi.Dt MBRTOC16 3C 169a4a12bdSRobert Mustacchi.Os 179a4a12bdSRobert Mustacchi.Sh NAME 189a4a12bdSRobert Mustacchi.Nm mbrtoc16 , 199a4a12bdSRobert Mustacchi.Nm mbrtoc32 , 209a4a12bdSRobert Mustacchi.Nm mbrtowc , 219a4a12bdSRobert Mustacchi.Nm mbrtowc_l 229a4a12bdSRobert Mustacchi.Nd convert characters to wide characters 239a4a12bdSRobert Mustacchi.Sh SYNOPSIS 249a4a12bdSRobert Mustacchi.In wchar.h 259a4a12bdSRobert Mustacchi.Ft size_t 269a4a12bdSRobert Mustacchi.Fo mbrtowc 279a4a12bdSRobert Mustacchi.Fa "wchar_t *restrict pwc" 289a4a12bdSRobert Mustacchi.Fa "const char *restrict str" 299a4a12bdSRobert Mustacchi.Fa "size_t len" 309a4a12bdSRobert Mustacchi.Fa "mstate_t *restrict ps" 319a4a12bdSRobert Mustacchi.Fc 329a4a12bdSRobert Mustacchi.In wchar.h 339a4a12bdSRobert Mustacchi.In xlocale.h 349a4a12bdSRobert Mustacchi.Ft size_t 359a4a12bdSRobert Mustacchi.Fo mbrtowc 369a4a12bdSRobert Mustacchi.Fa "wchar_t *restrict pwc" 379a4a12bdSRobert Mustacchi.Fa "const char *restrict str" 389a4a12bdSRobert Mustacchi.Fa "size_t len" 399a4a12bdSRobert Mustacchi.Fa "mstate_t *restrict ps" 409a4a12bdSRobert Mustacchi.Fa "locale_t loc" 419a4a12bdSRobert Mustacchi.Fc 429a4a12bdSRobert Mustacchi.In uchar.h 439a4a12bdSRobert Mustacchi.Ft size_t 449a4a12bdSRobert Mustacchi.Fo mbrtoc16 459a4a12bdSRobert Mustacchi.Fa "char16_t *restrict p16c" 469a4a12bdSRobert Mustacchi.Fa "const char *restrict str" 479a4a12bdSRobert Mustacchi.Fa "size_t len" 489a4a12bdSRobert Mustacchi.Fa "mbstate_t *restrict ps" 499a4a12bdSRobert Mustacchi.Fc 509a4a12bdSRobert Mustacchi.Ft size_t 519a4a12bdSRobert Mustacchi.Fo mbrtoc32 529a4a12bdSRobert Mustacchi.Fa "char32_t *restrict p32c" 539a4a12bdSRobert Mustacchi.Fa "const char *restrict str" 549a4a12bdSRobert Mustacchi.Fa "size_t len" 559a4a12bdSRobert Mustacchi.Fa "mbstate_t *restrict ps" 569a4a12bdSRobert Mustacchi.Fc 579a4a12bdSRobert Mustacchi.Sh DESCRIPTION 589a4a12bdSRobert MustacchiThe 599a4a12bdSRobert Mustacchi.Fn mbrtoc16 , 609a4a12bdSRobert Mustacchi.Fn mbrtoc32 , 619a4a12bdSRobert Mustacchi.Fn mbrtowc , 629a4a12bdSRobert Mustacchiand 639a4a12bdSRobert Mustacchi.Fn mbrtowc_l 649a4a12bdSRobert Mustacchifunctions convert character sequences, which may contain multi-byte 659a4a12bdSRobert Mustacchicharacters, into different character formats. 669a4a12bdSRobert MustacchiThe functions work in the following formats: 679a4a12bdSRobert Mustacchi.Bl -tag -width mbrtowc_l 689a4a12bdSRobert Mustacchi.It Fn mbrtoc16 699a4a12bdSRobert MustacchiA UTF-16 code sequence, where every code point is represented by one or 709a4a12bdSRobert Mustacchitwo 719a4a12bdSRobert Mustacchi.Vt char16_t . 729a4a12bdSRobert MustacchiThe UTF-16 encoding will encode certain Unicode code points as a pair of 739a4a12bdSRobert Mustacchitwo 16-bit code sequences, commonly referred to as a surrogate pair. 749a4a12bdSRobert Mustacchi.It Fn mbrtoc32 759a4a12bdSRobert MustacchiA UTF-32 code sequence, where every code point is represented by a 769a4a12bdSRobert Mustacchisingle 779a4a12bdSRobert Mustacchi.Vt char32_t . 789a4a12bdSRobert Mustacchi.It Fn mbrtowc , Fn mbrtowc_l 799a4a12bdSRobert MustacchiWide characters, being a 32-bit value where every code point is 809a4a12bdSRobert Mustacchirepresented by a single 819a4a12bdSRobert Mustacchi.Vt wchar_t . 829a4a12bdSRobert MustacchiWhile the 839a4a12bdSRobert Mustacchi.Vt wchar_t 849a4a12bdSRobert Mustacchiand 859a4a12bdSRobert Mustacchi.Vt char32_t 869a4a12bdSRobert Mustacchiare different types, in this implementation, they are similar encodings. 879a4a12bdSRobert Mustacchi.El 889a4a12bdSRobert Mustacchi.Pp 899a4a12bdSRobert MustacchiThe functions consume up to 909a4a12bdSRobert Mustacchi.Fa len 919a4a12bdSRobert Mustacchicharacters from the string 929a4a12bdSRobert Mustacchi.Fa str 939a4a12bdSRobert Mustacchiand accumulate them in 949a4a12bdSRobert Mustacchi.Fa ps 959a4a12bdSRobert Mustacchiuntil a valid character is found, which is influenced by 969a4a12bdSRobert Mustacchithe 979a4a12bdSRobert Mustacchi.Dv LC_CTYPE 989a4a12bdSRobert Mustacchicategory of the current locale. 999a4a12bdSRobert MustacchiFor example, in the 1009a4a12bdSRobert Mustacchi.Sy C 1019a4a12bdSRobert Mustacchilocale, only ASCII characters are recognized, while in a 1029a4a12bdSRobert Mustacchi.Sy UTF-8 1039a4a12bdSRobert Mustacchibased locale like 1049a4a12bdSRobert Mustacchi.Sy en_US.UTF-8 , 1059a4a12bdSRobert MustacchiUTF-8 multi-byte character sequences that represent Unicode code points 1069a4a12bdSRobert Mustacchiare recognized. 1079a4a12bdSRobert MustacchiThe 1089a4a12bdSRobert Mustacchi.Fn mbrtowc_l 1099a4a12bdSRobert Mustacchifunction uses the locale passed in 1109a4a12bdSRobert Mustacchi.Fa loc 1119a4a12bdSRobert Mustacchirather than the locale of the current thread. 1129a4a12bdSRobert Mustacchi.Pp 1139a4a12bdSRobert MustacchiWhen a valid character sequence has been found, it is converted to 1149a4a12bdSRobert Mustacchieither a 16-bit character sequence for 1159a4a12bdSRobert Mustacchi.Fn mbrtoc16 1169a4a12bdSRobert Mustacchior a 32-bit character sequence for 1179a4a12bdSRobert Mustacchi.Fn mbrtoc32 1189a4a12bdSRobert Mustacchiand will be stored in 1199a4a12bdSRobert Mustacchi.Fa p16c 1209a4a12bdSRobert Mustacchiand 1219a4a12bdSRobert Mustacchi.Fa p32c 1229a4a12bdSRobert Mustacchirespectively. 1239a4a12bdSRobert Mustacchi.Pp 1249a4a12bdSRobert MustacchiThe 1259a4a12bdSRobert Mustacchi.Fa ps 1269a4a12bdSRobert Mustacchiargument represents a multi-byte conversion state which can be used 1279a4a12bdSRobert Mustacchiacross multiple calls to a given function 1289a4a12bdSRobert Mustacchi.Pq but not mixed between functions . 1299a4a12bdSRobert MustacchiThese allow for characters to be consumed from subsequent buffers, e.g. 1309a4a12bdSRobert Mustacchidifferent values of 1319a4a12bdSRobert Mustacchi.Fa str . 1329a4a12bdSRobert MustacchiThe functions may be called from multiple threads as long as they use 1339a4a12bdSRobert Mustacchiunique values for 1349a4a12bdSRobert Mustacchi.Fa ps . 1359a4a12bdSRobert MustacchiIf 1369a4a12bdSRobert Mustacchi.Fa ps 1379a4a12bdSRobert Mustacchiis 1389a4a12bdSRobert Mustacchi.Dv NULL , 1399a4a12bdSRobert Mustacchithen a function-specific buffer will be used for the conversion state; 1409a4a12bdSRobert Mustacchihowever, this is stored between all threads and its use is not 1419a4a12bdSRobert Mustacchirecommended. 1429a4a12bdSRobert Mustacchi.Pp 1439a4a12bdSRobert MustacchiWhen using these functions, more than one character may be output for a 1449a4a12bdSRobert Mustacchigiven set of consumed input characters. 1459a4a12bdSRobert MustacchiAn example of this is when a given code point is represented as a set of 1469a4a12bdSRobert Mustacchisurrogate pairs in UTF-16, which require two 16-bit characters to 1479a4a12bdSRobert Mustacchirepresent a code point. 1489a4a12bdSRobert MustacchiWhen this occurs, the functions return the special return value 1499a4a12bdSRobert Mustacchi.Sy -3 . 1509a4a12bdSRobert Mustacchi.Pp 1519a4a12bdSRobert MustacchiThe functions all have a special behavior when 1529a4a12bdSRobert Mustacchi.Dv NULL 1539a4a12bdSRobert Mustacchiis passed for 1549a4a12bdSRobert Mustacchi.Fa str . 1559a4a12bdSRobert MustacchiThey instead will treat it as though 1569a4a12bdSRobert Mustacchi.Fa pwc , 1579a4a12bdSRobert Mustacchi.Fa p16c , 1589a4a12bdSRobert Mustacchior 1599a4a12bdSRobert Mustacchi.Fa p32c 1609a4a12bdSRobert Mustacchiwere 1619a4a12bdSRobert Mustacchi.Dv NULL , 1629a4a12bdSRobert Mustacchi.Fa str 1639a4a12bdSRobert Mustacchihad been passed as the empty string, "" and the length, 1649a4a12bdSRobert Mustacchi.Fa len , 1659a4a12bdSRobert Mustacchiwould appear as the value 1. 1669a4a12bdSRobert MustacchiIn other words, the functions would be called as: 1679a4a12bdSRobert Mustacchi.Bd -literal -offset indent 1689a4a12bdSRobert Mustacchimbrtowc(NULL, "", 1, ps) 1699a4a12bdSRobert Mustacchimbrtowc_l(NULL, "", 1, ps) 1709a4a12bdSRobert Mustacchimbrtoc16(NULL, "", 1, ps) 1719a4a12bdSRobert Mustacchimbrtoc32(NULL, "", 1, ps) 1729a4a12bdSRobert Mustacchi.Ed 1739a4a12bdSRobert Mustacchi.Ss Locale Details 1749a4a12bdSRobert MustacchiNot all locales in the system are Unicode based locales. 1759a4a12bdSRobert MustacchiFor example, ISO 8859 family locales have code points with values that 1769a4a12bdSRobert Mustacchido not match their counterparts in Unicode. 1779a4a12bdSRobert MustacchiWhen using these functions with non-Unicode based locales, the code 1789a4a12bdSRobert Mustacchipoints returned will be those determined by the locale. 1799a4a12bdSRobert MustacchiThey will not be converted to the corresponding Unicode code point. 1809a4a12bdSRobert MustacchiFor example, if using the Euro sign in ISO 8859-15, these functions 1819a4a12bdSRobert Mustacchimight return the code point 0xa4 and not the Unicode value 0x20ac. 1829a4a12bdSRobert Mustacchi.Pp 1839a4a12bdSRobert MustacchiRegardless of the locale, the characters returned will be encoded as 1849a4a12bdSRobert Mustacchithough the code point were the corresponding value in Unicode. 1859a4a12bdSRobert MustacchiThis means that if a locale returns a value that would be a surrogate 1869a4a12bdSRobert Mustacchipair in the UTF-16 encoding, it will still be encoded as a UTF-16 1879a4a12bdSRobert Mustacchicharacter. 1889a4a12bdSRobert Mustacchi.Pp 1899a4a12bdSRobert MustacchiThis behavior of the 1909a4a12bdSRobert Mustacchi.Fn mbrtoc16 1919a4a12bdSRobert Mustacchiand 1929a4a12bdSRobert Mustacchi.Fn mbrtoc32 1939a4a12bdSRobert Mustacchifunctions should not be relied upon, is not portable, and subject to 1949a4a12bdSRobert Mustacchichange for non-Unicode locales. 1959a4a12bdSRobert Mustacchi.Sh RETURN VALUES 1969a4a12bdSRobert MustacchiThe 1979a4a12bdSRobert Mustacchi.Fn mbrtoc16 , 1989a4a12bdSRobert Mustacchi.Fn mbrtoc32 , 1999a4a12bdSRobert Mustacchi.Fn mbrtowc , 2009a4a12bdSRobert Mustacchiand 2019a4a12bdSRobert Mustacchi.Fn mbrtowc_l 2029a4a12bdSRobert Mustacchifunctions return the following values: 2039a4a12bdSRobert Mustacchi.Bl -tag -width (size_t)-3 2049a4a12bdSRobert Mustacchi.It Sy 0 2059a4a12bdSRobert Mustacchi.Fa len 2069a4a12bdSRobert Mustacchior fewer bytes of 2079a4a12bdSRobert Mustacchi.Fa str 2089a4a12bdSRobert Mustacchiwere consumed and the null wide character was written into the wide 2099a4a12bdSRobert Mustacchicharacter buffer 2109a4a12bdSRobert Mustacchi.Po 2119a4a12bdSRobert Mustacchi.Fa pwc , 2129a4a12bdSRobert Mustacchi.Fa p16c , 2139a4a12bdSRobert Mustacchi.Fa p32c 2149a4a12bdSRobert Mustacchi.Pc . 2159a4a12bdSRobert Mustacchi.It Sy between 1 and len 2169a4a12bdSRobert MustacchiThe specified number of bytes were consumed and a single character was 2179a4a12bdSRobert Mustacchiwritten into the wide character buffer 2189a4a12bdSRobert Mustacchi.Po 2199a4a12bdSRobert Mustacchi.Fa pwc , 2209a4a12bdSRobert Mustacchi.Fa p16c , 2219a4a12bdSRobert Mustacchi.Fa p32c 2229a4a12bdSRobert Mustacchi.Pc . 2239a4a12bdSRobert Mustacchi.It Sy (size_t)-1 2249a4a12bdSRobert MustacchiAn encoding error has occurred. 2259a4a12bdSRobert MustacchiThe next 2269a4a12bdSRobert Mustacchi.Fa len 2279a4a12bdSRobert Mustacchibytes of 2289a4a12bdSRobert Mustacchi.Fa str 2299a4a12bdSRobert Mustacchido not contribute to a valid character. 2309a4a12bdSRobert Mustacchi.Va errno 2319a4a12bdSRobert Mustacchihas been set to 2329a4a12bdSRobert Mustacchi.Er EILSEQ . 2339a4a12bdSRobert MustacchiNo data was written into the wide character buffer 2349a4a12bdSRobert Mustacchi.Po 2359a4a12bdSRobert Mustacchi.Fa pwc , 2369a4a12bdSRobert Mustacchi.Fa p16c , 2379a4a12bdSRobert Mustacchi.Fa p32c 2389a4a12bdSRobert Mustacchi.Pc . 2399a4a12bdSRobert Mustacchi.It Sy (size_t)-2 2409a4a12bdSRobert Mustacchi.Fa len 2419a4a12bdSRobert Mustacchibytes of 2429a4a12bdSRobert Mustacchi.Fa str 2439a4a12bdSRobert Mustacchiwere consumed, but a complete multi-byte character sequence has not been 2449a4a12bdSRobert Mustacchifound and no data was written into the wide character buffer 2459a4a12bdSRobert Mustacchi.Po 2469a4a12bdSRobert Mustacchi.Fa pwc , 2479a4a12bdSRobert Mustacchi.Fa p16c , 2489a4a12bdSRobert Mustacchi.Fa p32c 2499a4a12bdSRobert Mustacchi.Pc . 2509a4a12bdSRobert Mustacchi.It Sy (size_t)-3 2519a4a12bdSRobert MustacchiA character has been written into the wide character buffer 2529a4a12bdSRobert Mustacchi.Po 2539a4a12bdSRobert Mustacchi.Fa pwc , 2549a4a12bdSRobert Mustacchi.Fa p16c , 2559a4a12bdSRobert Mustacchi.Fa p32c 2569a4a12bdSRobert Mustacchi.Pc . 2579a4a12bdSRobert MustacchiThis character was from a previous call (such as another part of a 2589a4a12bdSRobert MustacchiUTF-16 surrogate pair) and no input was consumed. 2599a4a12bdSRobert MustacchiThis is limited to the 2609a4a12bdSRobert Mustacchi.Fn mbrtoc16 2619a4a12bdSRobert Mustacchiand 2629a4a12bdSRobert Mustacchi.Fn mbrtoc32 2639a4a12bdSRobert Mustacchifunctions. 2649a4a12bdSRobert Mustacchi.El 2659a4a12bdSRobert Mustacchi.Sh EXAMPLES 2669a4a12bdSRobert Mustacchi.Sy Example 1 2679a4a12bdSRobert MustacchiUsing the 2689a4a12bdSRobert Mustacchi.Fn mbrtoc32 2699a4a12bdSRobert Mustacchifunction to convert a multibyte string. 2709a4a12bdSRobert Mustacchi.Bd -literal 2719a4a12bdSRobert Mustacchi#include <locale.h> 2729a4a12bdSRobert Mustacchi#include <stdlib.h> 2739a4a12bdSRobert Mustacchi#include <string.h> 2749a4a12bdSRobert Mustacchi#include <err.h> 2759a4a12bdSRobert Mustacchi#include <stdio.h> 2769a4a12bdSRobert Mustacchi#include <uchar.h> 2779a4a12bdSRobert Mustacchi 2789a4a12bdSRobert Mustacchiint 2799a4a12bdSRobert Mustacchimain(void) 2809a4a12bdSRobert Mustacchi{ 2819a4a12bdSRobert Mustacchi mbstate_t mbs; 2829a4a12bdSRobert Mustacchi char32_t out; 2839a4a12bdSRobert Mustacchi size_t ret; 2849a4a12bdSRobert Mustacchi const char *uchar_str = "\exe5\ex85\ex89"; 2859a4a12bdSRobert Mustacchi 2869a4a12bdSRobert Mustacchi (void) memset(&mbs, 0, sizeof (mbs)); 2879a4a12bdSRobert Mustacchi (void) setlocale(LC_CTYPE, "en_US.UTF-8"); 2889a4a12bdSRobert Mustacchi ret = mbrtoc32(&out, uchar_str, strlen(uchar_str), &mbs); 2899a4a12bdSRobert Mustacchi if (ret != strlen(uchar_str)) { 2909a4a12bdSRobert Mustacchi errx(EXIT_FAILURE, "failed to convert string, got %zd", 2919a4a12bdSRobert Mustacchi ret); 2929a4a12bdSRobert Mustacchi } 2939a4a12bdSRobert Mustacchi 2949a4a12bdSRobert Mustacchi (void) printf("Converted %zu bytes into UTF-32 character " 2959a4a12bdSRobert Mustacchi "0x%x\n", ret, out); 2969a4a12bdSRobert Mustacchi return (0); 2979a4a12bdSRobert Mustacchi} 2989a4a12bdSRobert Mustacchi.Ed 2999a4a12bdSRobert Mustacchi.Pp 3009a4a12bdSRobert MustacchiWhen compiled and run, this produces: 3019a4a12bdSRobert Mustacchi.Bd -literal -offset indent 3029a4a12bdSRobert Mustacchi$ ./a.out 3039a4a12bdSRobert MustacchiConverted 3 bytes into UTF-32 character 0x5149 3049a4a12bdSRobert Mustacchi.Ed 3059a4a12bdSRobert Mustacchi.Pp 3069a4a12bdSRobert Mustacchi.Sy Example 2 3079a4a12bdSRobert MustacchiHandling surrogate pairs from the 3089a4a12bdSRobert Mustacchi.Fn mbrtoc16 3099a4a12bdSRobert Mustacchifunction. 3109a4a12bdSRobert Mustacchi.Bd -literal 3119a4a12bdSRobert Mustacchi#include <locale.h> 3129a4a12bdSRobert Mustacchi#include <stdlib.h> 3139a4a12bdSRobert Mustacchi#include <string.h> 3149a4a12bdSRobert Mustacchi#include <err.h> 3159a4a12bdSRobert Mustacchi#include <stdio.h> 3169a4a12bdSRobert Mustacchi#include <uchar.h> 3179a4a12bdSRobert Mustacchi 3189a4a12bdSRobert Mustacchiint 3199a4a12bdSRobert Mustacchimain(void) 3209a4a12bdSRobert Mustacchi{ 3219a4a12bdSRobert Mustacchi mbstate_t mbs; 3229a4a12bdSRobert Mustacchi char16_t first, second; 3239a4a12bdSRobert Mustacchi size_t ret; 3249a4a12bdSRobert Mustacchi const char *uchar_str = "\exf0\ex9f\ex92\exa9"; 3259a4a12bdSRobert Mustacchi 3269a4a12bdSRobert Mustacchi (void) memset(&mbs, '\0', sizeof (mbs)); 3279a4a12bdSRobert Mustacchi (void) setlocale(LC_CTYPE, "en_US.UTF-8"); 3289a4a12bdSRobert Mustacchi ret = mbrtoc16(&first, uchar_str, strlen(uchar_str), &mbs); 3299a4a12bdSRobert Mustacchi if (ret != strlen(uchar_str)) { 3309a4a12bdSRobert Mustacchi errx(EXIT_FAILURE, "failed to convert string, got %zd", 3319a4a12bdSRobert Mustacchi ret); 3329a4a12bdSRobert Mustacchi } 3339a4a12bdSRobert Mustacchi 3349a4a12bdSRobert Mustacchi ret = mbrtoc16(&second, "", 0, &mbs); 3359a4a12bdSRobert Mustacchi if (ret != (size_t)-3) { 3369a4a12bdSRobert Mustacchi errx(EXIT_FAILURE, "didn't get second surrogate pair, " 3379a4a12bdSRobert Mustacchi "got %zd", ret); 3389a4a12bdSRobert Mustacchi } 3399a4a12bdSRobert Mustacchi 3409a4a12bdSRobert Mustacchi (void) printf("UTF-16 surrogates: 0x%x 0x%x\n", first, second); 3419a4a12bdSRobert Mustacchi return (0); 3429a4a12bdSRobert Mustacchi} 3439a4a12bdSRobert Mustacchi.Ed 3449a4a12bdSRobert Mustacchi.Pp 3459a4a12bdSRobert MustacchiWhen compiled and run, this produces: 3469a4a12bdSRobert Mustacchi.Bd -literal -offset indent 3479a4a12bdSRobert Mustacchi$ ./a.out 3489a4a12bdSRobert MustacchiUTF-16 surrogates: 0xd83d 0xdca9 3499a4a12bdSRobert Mustacchi.Ed 3509a4a12bdSRobert Mustacchi.Sh ERRORS 3519a4a12bdSRobert MustacchiThe 3529a4a12bdSRobert Mustacchi.Fn mbrtoc16 , 3539a4a12bdSRobert Mustacchi.Fn mbrtoc32 , 3549a4a12bdSRobert Mustacchi.Fn mbrtowc , 3559a4a12bdSRobert Mustacchiand 3569a4a12bdSRobert Mustacchi.Fn mbrtowc_l 3579a4a12bdSRobert Mustacchifunctions will fail if: 3589a4a12bdSRobert Mustacchi.Bl -tag -width Er 3599a4a12bdSRobert Mustacchi.It Er EINVAL 3609a4a12bdSRobert MustacchiThe conversion state in 3619a4a12bdSRobert Mustacchi.Fa ps 3629a4a12bdSRobert Mustacchiis invalid. 3639a4a12bdSRobert Mustacchi.It Er EILSEQ 3649a4a12bdSRobert MustacchiAn invalid character sequence has been detected. 3659a4a12bdSRobert Mustacchi.El 3669a4a12bdSRobert Mustacchi.Sh MT-LEVEL 3679a4a12bdSRobert MustacchiThe 3689a4a12bdSRobert Mustacchi.Fn mbrtoc16 , 3699a4a12bdSRobert Mustacchi.Fn mbrtoc32 , 3709a4a12bdSRobert Mustacchi.Fn mbrtowc , 3719a4a12bdSRobert Mustacchiand 3729a4a12bdSRobert Mustacchi.Fn mbrtowc_l 3739a4a12bdSRobert Mustacchifunctions are 3749a4a12bdSRobert Mustacchi.Sy MT-Safe 3759a4a12bdSRobert Mustacchias long as different 3769a4a12bdSRobert Mustacchi.Vt mbstate_t 3779a4a12bdSRobert Mustacchistructures are passed in 3789a4a12bdSRobert Mustacchi.Fa ps . 3799a4a12bdSRobert MustacchiIf 3809a4a12bdSRobert Mustacchi.Fa ps 3819a4a12bdSRobert Mustacchiis 3829a4a12bdSRobert Mustacchi.Dv NULL 3839a4a12bdSRobert Mustacchior different threads use the same value for 3849a4a12bdSRobert Mustacchi.Fa ps , 3859a4a12bdSRobert Mustacchithen the functions are 3869a4a12bdSRobert Mustacchi.Sy Unsafe . 3879a4a12bdSRobert Mustacchi.Sh INTERFACE STABILITY 3889a4a12bdSRobert Mustacchi.Sy Committed 3899a4a12bdSRobert Mustacchi.Sh SEE ALSO 3909a4a12bdSRobert Mustacchi.Xr c16rtomb 3C , 3919a4a12bdSRobert Mustacchi.Xr c32rtomb 3C , 3929a4a12bdSRobert Mustacchi.Xr newlocale 3C , 3939a4a12bdSRobert Mustacchi.Xr setlocale 3C , 3949a4a12bdSRobert Mustacchi.Xr uselocale 3C , 3959a4a12bdSRobert Mustacchi.Xr wcrtomb 3C , 3969a4a12bdSRobert Mustacchi.Xr uchar.h 3HEAD , 3979a4a12bdSRobert Mustacchi.Xr environ 5 398