1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
'\" t
.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
.\"
.\" SPDX-License-Identifier: GPL-2.0-or-later
.\"
.\" References consulted:
.\" GNU glibc-2 source code and manual
.\" Dinkumware C library reference http://www.dinkumware.com/
.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
.\" ISO/IEC 9899:1999
.\"
.TH wcrtomb 3 2023-03-30 "Linux man-pages 6.04"
.SH NAME
wcrtomb \- convert a wide character to a multibyte sequence
.SH LIBRARY
Standard C library
.RI ( libc ", " \-lc )
.SH SYNOPSIS
.nf
.B #include <wchar.h>
.PP
.BI "size_t wcrtomb(char *restrict " s ", wchar_t " wc \
", mbstate_t *restrict " ps );
.fi
.SH DESCRIPTION
The main case for this function is when
.I s
is
not NULL and
.I wc
is not a null wide character (L\[aq]\e0\[aq]).
In this case, the
.BR wcrtomb ()
function
converts the wide character
.I wc
to its multibyte representation and stores it
at the beginning of the character
array pointed to by
.IR s .
It updates the shift state
.IR *ps ,
and
returns the length of said multibyte representation,
that is, the number of bytes
written at
.IR s .
.PP
A different case is when
.I s
is not NULL,
but
.I wc
is a null wide character (L\[aq]\e0\[aq]).
In this case, the
.BR wcrtomb ()
function stores at
the character array pointed to by
.I s
the shift sequence needed to
bring
.I *ps
back to the initial state,
followed by a \[aq]\e0\[aq] byte.
It updates the shift state
.I *ps
(i.e., brings
it into the initial state),
and returns the length of the shift sequence plus
one, that is, the number of bytes written at
.IR s .
.PP
A third case is when
.I s
is NULL.
In this case,
.I wc
is ignored,
and the function effectively returns
.PP
.in +4n
.EX
wcrtomb(buf, L\[aq]\e0\[aq], ps)
.EE
.in
.PP
where
.I buf
is an internal anonymous buffer.
.PP
In all of the above cases, if
.I ps
is NULL, a static anonymous
state known only to the
.BR wcrtomb ()
function is used instead.
.SH RETURN VALUE
The
.BR wcrtomb ()
function returns the number of
bytes that have been or would
have been written to the byte array at
.IR s .
If
.I wc
can not be
represented as a multibyte sequence (according to the current locale),
.I (size_t)\ \-1
is returned, and
.I errno
set to
.BR EILSEQ .
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface Attribute Value
T{
.BR wcrtomb ()
T} Thread safety MT-Unsafe race:wcrtomb/!ps
.TE
.hy
.ad
.sp 1
.SH STANDARDS
C11, POSIX.1-2008.
.SH HISTORY
POSIX.1-2001, C99.
.SH NOTES
The behavior of
.BR wcrtomb ()
depends on the
.B LC_CTYPE
category of the
current locale.
.PP
Passing NULL as
.I ps
is not multithread safe.
.SH SEE ALSO
.BR mbsinit (3),
.BR wcsrtombs (3)
|