xref: /freebsd/lib/libc/stdlib/strfmon.3 (revision 2a163c3649e59dd616e057994ec02092362f0ae7)
18c9893a3SJeroen Ruigrok van der Werven.\" Copyright (c) 2001 Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org>
28c9893a3SJeroen Ruigrok van der Werven.\" All rights reserved.
38c9893a3SJeroen Ruigrok van der Werven.\"
48c9893a3SJeroen Ruigrok van der Werven.\" Redistribution and use in source and binary forms, with or without
58c9893a3SJeroen Ruigrok van der Werven.\" modification, are permitted provided that the following conditions
68c9893a3SJeroen Ruigrok van der Werven.\" are met:
78c9893a3SJeroen Ruigrok van der Werven.\" 1. Redistributions of source code must retain the above copyright
88c9893a3SJeroen Ruigrok van der Werven.\"    notice, this list of conditions and the following disclaimer.
98c9893a3SJeroen Ruigrok van der Werven.\" 2. Redistributions in binary form must reproduce the above copyright
108c9893a3SJeroen Ruigrok van der Werven.\"    notice, this list of conditions and the following disclaimer in the
118c9893a3SJeroen Ruigrok van der Werven.\"    documentation and/or other materials provided with the distribution.
128c9893a3SJeroen Ruigrok van der Werven.\"
138c9893a3SJeroen Ruigrok van der Werven.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
148c9893a3SJeroen Ruigrok van der Werven.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158c9893a3SJeroen Ruigrok van der Werven.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
168c9893a3SJeroen Ruigrok van der Werven.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
178c9893a3SJeroen Ruigrok van der Werven.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
188c9893a3SJeroen Ruigrok van der Werven.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
198c9893a3SJeroen Ruigrok van der Werven.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
208c9893a3SJeroen Ruigrok van der Werven.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
218c9893a3SJeroen Ruigrok van der Werven.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
228c9893a3SJeroen Ruigrok van der Werven.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
238c9893a3SJeroen Ruigrok van der Werven.\" SUCH DAMAGE.
248c9893a3SJeroen Ruigrok van der Werven.\"
25*2a163c36SJose Luis Duran.Dd December 6, 2023
268c9893a3SJeroen Ruigrok van der Werven.Dt STRFMON 3
278c9893a3SJeroen Ruigrok van der Werven.Os
288c9893a3SJeroen Ruigrok van der Werven.Sh NAME
29d96088b3SJose Luis Duran.Nm strfmon ,
30d96088b3SJose Luis Duran.Nm strfmon_l
318c9893a3SJeroen Ruigrok van der Werven.Nd convert monetary value to string
328c9893a3SJeroen Ruigrok van der Werven.Sh LIBRARY
338c9893a3SJeroen Ruigrok van der Werven.Lb libc
348c9893a3SJeroen Ruigrok van der Werven.Sh SYNOPSIS
35fbded498SJeroen Ruigrok van der Werven.In monetary.h
368c9893a3SJeroen Ruigrok van der Werven.Ft ssize_t
37883738f2SMike Barcroft.Fn strfmon "char * restrict s" "size_t maxsize" "const char * restrict format" "..."
3859cc636dSJose Luis Duran.In monetary.h
3959cc636dSJose Luis Duran.In xlocale.h
403f19323aSIsabell Long.Ft ssize_t
413f19323aSIsabell Long.Fn strfmon_l "char * restrict s" "size_t maxsize" "locale_t loc" "const char * restrict format" "..."
428c9893a3SJeroen Ruigrok van der Werven.Sh DESCRIPTION
438c9893a3SJeroen Ruigrok van der WervenThe
448c9893a3SJeroen Ruigrok van der Werven.Fn strfmon
458c9893a3SJeroen Ruigrok van der Wervenfunction places characters into the array pointed to by
4659cc636dSJose Luis Duran.Fa s ,
47fbded498SJeroen Ruigrok van der Wervenas controlled by the string pointed to by
488c9893a3SJeroen Ruigrok van der Werven.Fa format .
498c9893a3SJeroen Ruigrok van der WervenNo more than
508c9893a3SJeroen Ruigrok van der Werven.Fa maxsize
518c9893a3SJeroen Ruigrok van der Wervenbytes are placed into the array.
52d0d87283STim J. Robbins.Pp
533f19323aSIsabell LongThe
543f19323aSIsabell Long.Fn strfmon_l
5559cc636dSJose Luis Duranfunction takes an explicit locale argument, whereas the
563f19323aSIsabell Long.Fn strfmon
5759cc636dSJose Luis Duranfunction uses the current global or per-thread locale.
583f19323aSIsabell Long.Pp
59d0d87283STim J. RobbinsThe format string is composed of zero or more directives:
60d0d87283STim J. Robbinsordinary characters (not
611798791dSRuslan Ermilov.Cm % ) ,
62d0d87283STim J. Robbinswhich are copied unchanged to the output stream; and conversion
63d0d87283STim J. Robbinsspecifications, each of which results in fetching zero or more subsequent
64d0d87283STim J. Robbinsarguments.
65d0d87283STim J. RobbinsEach conversion specification is introduced by the
66d0d87283STim J. Robbins.Cm %
67d0d87283STim J. Robbinscharacter.
68d0d87283STim J. RobbinsAfter the
69d0d87283STim J. Robbins.Cm % ,
70d0d87283STim J. Robbinsthe following appear in sequence:
71d0d87283STim J. Robbins.Bl -bullet
72d0d87283STim J. Robbins.It
73d0d87283STim J. RobbinsZero or more of the following flags:
74d0d87283STim J. Robbins.Bl -tag -width "XXX"
75d0d87283STim J. Robbins.It Cm = Ns Ar f
76d0d87283STim J. RobbinsA
77d0d87283STim J. Robbins.Sq Cm =
78d0d87283STim J. Robbinscharacter followed by another character
79d0d87283STim J. Robbins.Ar f
80d0d87283STim J. Robbinswhich is used as the numeric fill character.
81d0d87283STim J. Robbins.It Cm ^
82d0d87283STim J. RobbinsDo not use grouping characters, regardless of the current locale default.
83d0d87283STim J. Robbins.It Cm +
84d0d87283STim J. RobbinsRepresent positive values by prefixing them with a positive sign,
85d0d87283STim J. Robbinsand negative values by prefixing them with a negative sign.
86d0d87283STim J. RobbinsThis is the default.
871798791dSRuslan Ermilov.It Cm \&(
88d0d87283STim J. RobbinsEnclose negative values in parentheses.
891798791dSRuslan Ermilov.It Cm \&!
90d0d87283STim J. RobbinsDo not include a currency symbol in the output.
91d0d87283STim J. Robbins.It Cm \-
92d0d87283STim J. RobbinsLeft justify the result.
93d0d87283STim J. RobbinsOnly valid when a field width is specified.
94d0d87283STim J. Robbins.El
95d0d87283STim J. Robbins.It
96d0d87283STim J. RobbinsAn optional minimum field width as a decimal number.
97d0d87283STim J. RobbinsBy default, there is no minimum width.
98d0d87283STim J. Robbins.It
99d0d87283STim J. RobbinsA
100d0d87283STim J. Robbins.Sq Cm #
101d0d87283STim J. Robbinssign followed by a decimal number specifying the maximum
1027cfd67ceSJose Luis Duranexpected number of digits before the radix character.
1037cfd67ceSJose Luis DuranWhen this option is used, values that do not exceed the
1047cfd67ceSJose Luis Duranspecified number of digits are formatted so they will be
1057cfd67ceSJose Luis Durancorrectly aligned with other values printed using the same
1067cfd67ceSJose Luis Duranformat.
1077cfd67ceSJose Luis DuranThis includes always leaving space for a possible sign
1087cfd67ceSJose Luis Duranindicator, even if none is needed for a particular value.
109d0d87283STim J. Robbins.It
110d0d87283STim J. RobbinsA
111d0d87283STim J. Robbins.Sq Cm \&.
112d0d87283STim J. Robbinscharacter followed by a decimal number specifying the number
1130efec50eSJose Luis Duranof digits after the radix character.
114d0d87283STim J. Robbins.It
115d0d87283STim J. RobbinsOne of the following conversion specifiers:
116d0d87283STim J. Robbins.Bl -tag -width "XXX"
117d0d87283STim J. Robbins.It Cm i
118d0d87283STim J. RobbinsThe
119d0d87283STim J. Robbins.Vt double
120d0d87283STim J. Robbinsargument is formatted as an international monetary amount.
121d0d87283STim J. Robbins.It Cm n
122d0d87283STim J. RobbinsThe
123d0d87283STim J. Robbins.Vt double
124d0d87283STim J. Robbinsargument is formatted as a national monetary amount.
125d0d87283STim J. Robbins.It Cm %
126d0d87283STim J. RobbinsA
127d0d87283STim J. Robbins.Sq Li %
128d0d87283STim J. Robbinscharacter is written.
129d0d87283STim J. Robbins.El
130d0d87283STim J. Robbins.El
1318c9893a3SJeroen Ruigrok van der Werven.Sh RETURN VALUES
13259cc636dSJose Luis DuranIf the total number of resulting bytes, including the terminating
133a3fb6da9SGlen Barber.Dv NUL
13459cc636dSJose Luis Duranbyte, is not more than
1358c9893a3SJeroen Ruigrok van der Werven.Fa maxsize ,
136fbded498SJeroen Ruigrok van der Werven.Fn strfmon
13759cc636dSJose Luis Duranand
13859cc636dSJose Luis Duran.Fn strfmon_l
13959cc636dSJose Luis Duranreturn the number of bytes placed into the array pointed to by
1408c9893a3SJeroen Ruigrok van der Werven.Fa s ,
141fbded498SJeroen Ruigrok van der Wervennot including the terminating
142a3fb6da9SGlen Barber.Dv NUL
143fbded498SJeroen Ruigrok van der Wervenbyte.
1441798791dSRuslan ErmilovOtherwise, \-1 is returned,
1458c9893a3SJeroen Ruigrok van der Werventhe contents of the array are indeterminate,
1468c9893a3SJeroen Ruigrok van der Wervenand
1478c9893a3SJeroen Ruigrok van der Werven.Va errno
1488c9893a3SJeroen Ruigrok van der Wervenis set to indicate the error.
149cdd9d92dSJose Luis Duran.Sh EXAMPLES
150cdd9d92dSJose Luis DuranThe following example will format the value
151cdd9d92dSJose Luis Duran.Dq Li 1234567.89
152cdd9d92dSJose Luis Duranto the string
153cdd9d92dSJose Luis Duran.Dq Li $1,234,567.89 :
154cdd9d92dSJose Luis Duran.Bd -literal -offset indent
155cdd9d92dSJose Luis Duran#include <stdio.h>
156cdd9d92dSJose Luis Duran#include <monetary.h>
157*2a163c36SJose Luis Duran#include <locale.h>
158cdd9d92dSJose Luis Duran
159cdd9d92dSJose Luis Duranint
160*2a163c36SJose Luis Duranmain(void)
161cdd9d92dSJose Luis Duran{
162cdd9d92dSJose Luis Duran	char string[100];
163cdd9d92dSJose Luis Duran	double money = 1234567.89;
164cdd9d92dSJose Luis Duran
165cdd9d92dSJose Luis Duran	if (setlocale(LC_MONETARY, "en_US.UTF-8") == NULL) {
166cdd9d92dSJose Luis Duran		fprintf(stderr, "Unable to setlocale().\\n");
167cdd9d92dSJose Luis Duran		return (1);
168cdd9d92dSJose Luis Duran	}
169cdd9d92dSJose Luis Duran
170cdd9d92dSJose Luis Duran	strfmon(string, sizeof(string) - 1, "%n", money);
171cdd9d92dSJose Luis Duran	printf("%s\\n", string);
172*2a163c36SJose Luis Duran
173*2a163c36SJose Luis Duran	return (0);
174cdd9d92dSJose Luis Duran}
175cdd9d92dSJose Luis Duran.Ed
1768c9893a3SJeroen Ruigrok van der Werven.Sh ERRORS
1778c9893a3SJeroen Ruigrok van der WervenThe
178fbded498SJeroen Ruigrok van der Werven.Fn strfmon
1798c9893a3SJeroen Ruigrok van der Wervenfunction will fail if:
1808c9893a3SJeroen Ruigrok van der Werven.Bl -tag -width Er
1818c9893a3SJeroen Ruigrok van der Werven.It Bq Er E2BIG
1828c9893a3SJeroen Ruigrok van der WervenConversion stopped due to lack of space in the buffer.
183d0d87283STim J. Robbins.It Bq Er EINVAL
184d0d87283STim J. RobbinsThe format string is invalid.
185d0d87283STim J. Robbins.It Bq Er ENOMEM
186d0d87283STim J. RobbinsNot enough memory for temporary buffers.
1878c9893a3SJeroen Ruigrok van der Werven.El
1888c9893a3SJeroen Ruigrok van der Werven.Sh SEE ALSO
189d96088b3SJose Luis Duran.Xr localeconv 3 ,
190d96088b3SJose Luis Duran.Xr xlocale 3
1918c9893a3SJeroen Ruigrok van der Werven.Sh STANDARDS
1928c9893a3SJeroen Ruigrok van der WervenThe
1938c9893a3SJeroen Ruigrok van der Werven.Fn strfmon
1948c9893a3SJeroen Ruigrok van der Wervenfunction
1958c9893a3SJeroen Ruigrok van der Wervenconforms to
196d0d87283STim J. Robbins.St -p1003.1-2001 .
1973f19323aSIsabell LongThe
1983f19323aSIsabell Long.Fn strfmon_l
1993f19323aSIsabell Longfunction conforms to
2003f19323aSIsabell Long.St -p1003.1-2008 .
2018c9893a3SJeroen Ruigrok van der Werven.Sh AUTHORS
2022677aa4bSRuslan Ermilov.An -nosplit
2038c9893a3SJeroen Ruigrok van der WervenThe
204fbded498SJeroen Ruigrok van der Werven.Fn strfmon
2058c9893a3SJeroen Ruigrok van der Wervenfunction was implemented by
2068fbf3d50SBaptiste Daroussin.An Alexey Zelkin Aq Mt phantom@FreeBSD.org .
2078c9893a3SJeroen Ruigrok van der Werven.Pp
2088c9893a3SJeroen Ruigrok van der WervenThis manual page was written by
2098fbf3d50SBaptiste Daroussin.An Jeroen Ruigrok van der Werven Aq Mt asmodai@FreeBSD.org
2108c9893a3SJeroen Ruigrok van der Wervenbased on the standards' text.
211b211af11STim J. Robbins.Sh BUGS
212b211af11STim J. RobbinsThe
213b211af11STim J. Robbins.Fn strfmon
214b211af11STim J. Robbinsfunction does not correctly handle multibyte characters in the
215b211af11STim J. Robbins.Fa format
216b211af11STim J. Robbinsargument.
217