xref: /freebsd/lib/libc/stdlib/strfromd.3 (revision f68d7bfc1479042184e09431bd55771c50c47f68)
1*f68d7bfcSFaraz Vahedi.\"
2*f68d7bfcSFaraz Vahedi.\" Copyright (c) 2026 Faraz Vahedi <kfv@kfv.io>
3*f68d7bfcSFaraz Vahedi.\"
4*f68d7bfcSFaraz Vahedi.\" SPDX-License-Identifier: BSD-2-Clause
5*f68d7bfcSFaraz Vahedi.\"
6*f68d7bfcSFaraz Vahedi.Dd June 27, 2026
7*f68d7bfcSFaraz Vahedi.Dt STRFROMD 3
8*f68d7bfcSFaraz Vahedi.Os
9*f68d7bfcSFaraz Vahedi.Sh NAME
10*f68d7bfcSFaraz Vahedi.Nm strfromd ,
11*f68d7bfcSFaraz Vahedi.Nm strfromf ,
12*f68d7bfcSFaraz Vahedi.Nm strfroml
13*f68d7bfcSFaraz Vahedi.Nd convert floating point value to
14*f68d7bfcSFaraz Vahedi.Tn ASCII
15*f68d7bfcSFaraz Vahedistring
16*f68d7bfcSFaraz Vahedi.Sh LIBRARY
17*f68d7bfcSFaraz Vahedi.Lb libc
18*f68d7bfcSFaraz Vahedi.Sh SYNOPSIS
19*f68d7bfcSFaraz Vahedi.In stdlib.h
20*f68d7bfcSFaraz Vahedi.Ft int
21*f68d7bfcSFaraz Vahedi.Fn strfromd "char * restrict str" "size_t size" "const char * restrict format" "double fp"
22*f68d7bfcSFaraz Vahedi.Ft int
23*f68d7bfcSFaraz Vahedi.Fn strfromf "char * restrict str" "size_t size" "const char * restrict format" "float fp"
24*f68d7bfcSFaraz Vahedi.Ft int
25*f68d7bfcSFaraz Vahedi.Fn strfroml "char * restrict str" "size_t size" "const char * restrict format" "long double fp"
26*f68d7bfcSFaraz Vahedi.Sh DESCRIPTION
27*f68d7bfcSFaraz VahediFunctions
28*f68d7bfcSFaraz Vahedi.Fn strfromd ,
29*f68d7bfcSFaraz Vahedi.Fn strfromf ,
30*f68d7bfcSFaraz Vahediand
31*f68d7bfcSFaraz Vahedi.Fn strfroml
32*f68d7bfcSFaraz Vahediconvert the floating-point value
33*f68d7bfcSFaraz Vahedi.Fa fp
34*f68d7bfcSFaraz Vahedito a null terminated string, storing at most
35*f68d7bfcSFaraz Vahedi.Fa size
36*f68d7bfcSFaraz Vahedibytes
37*f68d7bfcSFaraz Vahedi.Pq including the terminating null character
38*f68d7bfcSFaraz Vahediinto the array pointed to by
39*f68d7bfcSFaraz Vahedi.Fa str .
40*f68d7bfcSFaraz Vahedi.Pp
41*f68d7bfcSFaraz VahediThese functions are equivalent to
42*f68d7bfcSFaraz Vahedi.Fn snprintf "s" "n" "format" "fp" ,
43*f68d7bfcSFaraz Vahediexcept that default argument promotions are not applied to
44*f68d7bfcSFaraz Vahedi.Fa fp ,
45*f68d7bfcSFaraz Vahediand the
46*f68d7bfcSFaraz Vahedi.Fa format
47*f68d7bfcSFaraz Vahedistring is restricted.
48*f68d7bfcSFaraz VahediIt shall consist of exactly the character
49*f68d7bfcSFaraz Vahedi.Ql % ,
50*f68d7bfcSFaraz Vahedifollowed by an optional precision that does not contain an asterisk
51*f68d7bfcSFaraz Vahedi.Ql * ,
52*f68d7bfcSFaraz Vahedifollowed by one of the conversion specifiers
53*f68d7bfcSFaraz Vahedi.Cm a , A , e , E , f , F , g ,
54*f68d7bfcSFaraz Vahedior
55*f68d7bfcSFaraz Vahedi.Cm G .
56*f68d7bfcSFaraz VahediThe conversion specifier applies to the type indicated by the
57*f68d7bfcSFaraz Vahedifunction suffix, rather than by a length modifier.
58*f68d7bfcSFaraz Vahedi.Pp
59*f68d7bfcSFaraz VahediUse of any other format string results in undefined behaviour,
60*f68d7bfcSFaraz Vahedias does any undefined behaviour inherited from
61*f68d7bfcSFaraz Vahedi.Xr snprintf 3
62*f68d7bfcSFaraz Vahediper se.
63*f68d7bfcSFaraz VahediIn case of a format string not specified by the standard, the string
64*f68d7bfcSFaraz Vahedi.Ql EDOOFUS
65*f68d7bfcSFaraz Vahediis written to
66*f68d7bfcSFaraz Vahedi.Fa str ,
67*f68d7bfcSFaraz Vahedisubject to the same truncation rules as a successful conversion, and
68*f68d7bfcSFaraz Vahedi.Va errno
69*f68d7bfcSFaraz Vahediis set to
70*f68d7bfcSFaraz Vahedi.Er EDOOFUS .
71*f68d7bfcSFaraz Vahedi.Sh RETURN VALUES
72*f68d7bfcSFaraz VahediThe
73*f68d7bfcSFaraz Vahedi.Fn strfromd ,
74*f68d7bfcSFaraz Vahedi.Fn strfromf ,
75*f68d7bfcSFaraz Vahediand
76*f68d7bfcSFaraz Vahedi.Fn strfroml
77*f68d7bfcSFaraz Vahedifunctions, as per
78*f68d7bfcSFaraz Vahedi.Xr snprintf 3 ,
79*f68d7bfcSFaraz Vahedireturn the number of characters
80*f68d7bfcSFaraz Vahedi.Po
81*f68d7bfcSFaraz Vahedinot counting the terminating null character
82*f68d7bfcSFaraz Vahedi.Pc
83*f68d7bfcSFaraz Vahedithat would have been written
84*f68d7bfcSFaraz Vahedihad
85*f68d7bfcSFaraz Vahedi.Fa n
86*f68d7bfcSFaraz Vahedibeen sufficiently large.
87*f68d7bfcSFaraz VahediThus, the null terminated output has been completely written if
88*f68d7bfcSFaraz Vahediand only if the returned value is both nonnegative and less than
89*f68d7bfcSFaraz Vahedi.Fa size .
90*f68d7bfcSFaraz Vahedi.Sh ERRORS
91*f68d7bfcSFaraz Vahedi.Bl -tag -width Er
92*f68d7bfcSFaraz Vahedi.It Bq Er EDOOFUS
93*f68d7bfcSFaraz VahediThe
94*f68d7bfcSFaraz Vahedi.Fa format
95*f68d7bfcSFaraz Vahedistring is not of the form the standard specifies.
96*f68d7bfcSFaraz Vahedi.El
97*f68d7bfcSFaraz Vahedi.Sh SEE ALSO
98*f68d7bfcSFaraz Vahedi.Xr snprintf 3 ,
99*f68d7bfcSFaraz Vahedi.Xr strtod 3 ,
100*f68d7bfcSFaraz Vahedi.Xr strtol 3 ,
101*f68d7bfcSFaraz Vahedi.Xr strtoul 3
102*f68d7bfcSFaraz Vahedi.Sh STANDARDS
103*f68d7bfcSFaraz VahediFunctions
104*f68d7bfcSFaraz Vahedi.Fn strfromd ,
105*f68d7bfcSFaraz Vahedi.Fn strfromf ,
106*f68d7bfcSFaraz Vahediand
107*f68d7bfcSFaraz Vahedi.Fn strfroml
108*f68d7bfcSFaraz Vahediconform to
109*f68d7bfcSFaraz Vahedi.St -isoC-2023 .
110