summaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2017/man3p/fwprintf.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2017/man3p/fwprintf.3p')
-rw-r--r--man-pages-posix-2017/man3p/fwprintf.3p1045
1 files changed, 1045 insertions, 0 deletions
diff --git a/man-pages-posix-2017/man3p/fwprintf.3p b/man-pages-posix-2017/man3p/fwprintf.3p
new file mode 100644
index 0000000..94ef106
--- /dev/null
+++ b/man-pages-posix-2017/man3p/fwprintf.3p
@@ -0,0 +1,1045 @@
+'\" et
+.TH FWPRINTF "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.\"
+.SH NAME
+fwprintf,
+swprintf,
+wprintf
+\(em print formatted wide-character output
+.SH SYNOPSIS
+.LP
+.nf
+#include <stdio.h>
+#include <wchar.h>
+.P
+int fwprintf(FILE *restrict \fIstream\fP, const wchar_t *restrict \fIformat\fP, ...);
+int swprintf(wchar_t *restrict \fIws\fP, size_t \fIn\fP,
+ const wchar_t *restrict \fIformat\fP, ...);
+int wprintf(const wchar_t *restrict \fIformat\fP, ...);
+.fi
+.SH DESCRIPTION
+The functionality described on this reference page is aligned with the
+ISO\ C standard. Any conflict between the requirements described here and the
+ISO\ C standard is unintentional. This volume of POSIX.1\(hy2017 defers to the ISO\ C standard.
+.P
+The
+\fIfwprintf\fR()
+function shall place output on the named output
+.IR stream .
+The
+\fIwprintf\fR()
+function shall place output on the standard output stream
+.IR stdout .
+The
+\fIswprintf\fR()
+function shall place output followed by the null wide character in
+consecutive wide characters starting at *\fIws\fP; no more than
+.IR n
+wide characters shall be written, including a terminating null wide
+character, which is always added (unless
+.IR n
+is zero).
+.P
+Each of these functions shall convert, format, and print its arguments
+under control of the
+.IR format
+wide-character string. The
+.IR format
+is composed of zero or more directives:
+.IR "ordinary wide-characters" ,
+which are simply copied to the output stream, and
+.IR "conversion specifications" ,
+each of which results in the fetching of zero or more arguments. The
+results are undefined if there are insufficient arguments for the
+.IR format .
+If the
+.IR format
+is exhausted while arguments remain, the excess arguments are evaluated
+but are otherwise ignored.
+.P
+Conversions can be applied to the
+.IR n th
+argument after the
+.IR format
+in the argument list, rather than to the next unused argument. In this
+case, the conversion specifier wide character
+.BR %
+(see below) is replaced by the
+sequence
+.BR \(dq%n$\(dq ,
+where
+.IR n
+is a decimal integer in the range [1,{NL_ARGMAX}],
+giving the position of the argument in the argument list. This feature
+provides for the definition of
+.IR format
+wide-character strings that select arguments in an order appropriate to
+specific languages (see the EXAMPLES section).
+.P
+The
+.IR format
+can contain either numbered argument specifications (that is,
+\fR"%\fIn\fR$"\fR and \fR"*\fIm\fR$"\fR), or unnumbered argument
+conversion specifications (that is,
+.BR %
+and
+.BR * ),
+but not both. The only exception to this is that
+.BR %%
+can be mixed with the \fR"%\fIn\fR$"\fR form. The results of mixing
+numbered and unnumbered argument specifications in a
+.IR format
+wide-character string are undefined. When numbered argument
+specifications are used, specifying the
+.IR N th
+argument requires that all the leading arguments, from the first to the
+(\fIN\fP\-1)th, are specified in the
+.IR format
+wide-character string.
+.P
+In
+.IR format
+wide-character strings containing the \fR"%\fIn\fR$"\fR form of
+conversion specification, numbered arguments in the argument list can
+be referenced from the
+.IR format
+wide-character string as many times as required.
+.P
+In
+.IR format
+wide-character strings containing the
+.BR %
+form of conversion specification, each argument in the argument list
+shall be used exactly once. It is unspecified whether an encoding
+error occurs if the format string contains
+.BR wchar_t
+values that do not correspond to members of the character
+set of the current locale and the specified semantics do not
+require that value to be processed by
+\fIwcrtomb\fR().
+.P
+All forms of the
+\fIfwprintf\fR()
+function allow for the insertion of a locale-dependent radix
+character in the output string, output as a wide-character value. The
+radix character is defined in the current locale (category
+.IR LC_NUMERIC ).
+In the POSIX locale, or in a locale where the radix character is not
+defined, the radix character shall default to a
+<period>
+(\c
+.BR '.' ).
+.br
+.P
+Each conversion specification is introduced by the
+.BR '%'
+wide character
+or by the wide-character sequence \fR"%\fIn\fR$"\fR,
+after which the following appear in sequence:
+.IP " *" 4
+Zero or more
+.IR flags
+(in any order), which modify the meaning of the conversion
+specification.
+.IP " *" 4
+An optional minimum
+.IR "field width" .
+If the converted value has fewer wide characters than the field width,
+it shall be padded with
+<space>
+characters by default on the left; it shall be padded on the right,
+if the left-adjustment flag (\c
+.BR '\-' ),
+described below, is given to the field width. The field width takes the
+form of an
+<asterisk>
+(\c
+.BR '*' ),
+described below, or a decimal integer.
+.IP " *" 4
+An optional
+.IR precision
+that gives the minimum number of digits to appear for the
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+and
+.BR X
+conversion specifiers; the number of digits to appear after the radix
+character for the
+.BR a ,
+.BR A ,
+.BR e ,
+.BR E ,
+.BR f ,
+and
+.BR F
+conversion specifiers; the maximum number of significant digits for the
+.BR g
+and
+.BR G
+conversion specifiers; or the maximum number of wide characters to be
+printed from a string in the
+.BR s
+conversion specifiers. The precision takes the form of a
+<period>
+(\c
+.BR '.' )
+followed either by an
+<asterisk>
+(\c
+.BR '*' ),
+described below, or an optional decimal digit string, where a null
+digit string is treated as 0. If a precision appears with any other
+conversion wide character, the behavior is undefined.
+.IP " *" 4
+An optional length modifier that specifies the size of the argument.
+.IP " *" 4
+A
+.IR "conversion specifier"
+wide character that indicates the type of conversion to be applied.
+.P
+A field width, or precision, or both, may be indicated by an
+<asterisk>
+(\c
+.BR '*' ).
+In this case an argument of type
+.BR int
+supplies the field width or precision. Applications shall ensure that
+arguments specifying field width, or precision, or both appear in that
+order before the argument, if any, to be converted. A negative field
+width is taken as a
+.BR '\-'
+flag followed by a positive field width. A negative precision is taken
+as if the precision were omitted.
+In
+.IR format
+wide-character strings containing the \fR"%\fIn\fR$"\fR form
+of a conversion specification, a field width or precision may be
+indicated by the sequence \fR"*\fIm\fR$"\fR, where
+.IR m
+is a decimal integer in the range [1,{NL_ARGMAX}] giving the position
+in the argument list (after the
+.IR format
+argument) of an integer argument containing the field width or
+precision, for example:
+.sp
+.RS 4
+.nf
+
+wprintf(L"%1$d:%2$.*3$d:%4$.*3$d\en", hour, min, precision, sec); \*?
+.fi
+.P
+.RE
+.P
+The flag wide characters and their meanings are:
+.IP "\fR\(aq\fR" 8
+(The
+<apostrophe>.)
+The integer portion of the result of a decimal conversion (\c
+.BR %i ,
+.BR %d ,
+.BR %u ,
+.BR %f ,
+.BR %F ,
+.BR %g ,
+or
+.BR %G )
+shall be formatted with thousands' grouping wide characters. For other
+conversions, the behavior is undefined. The numeric grouping wide
+character is used.
+.IP "\fR\-\fR" 8
+The result of the conversion shall be left-justified within the field.
+The conversion shall be right-justified if this flag is not specified.
+.IP "\fR+\fR" 8
+The result of a signed conversion shall always begin with a sign (\c
+.BR '+'
+or
+.BR '\-' ).
+The conversion shall begin with a sign only when a negative value is
+converted if this flag is not specified.
+.IP <space> 8
+If the first wide character of a signed conversion is not a sign, or if
+a signed conversion results in no wide characters, a
+<space>
+shall be prefixed to the result. This means that if the
+<space>
+and
+.BR '+'
+flags both appear, the
+<space>
+flag shall be ignored.
+.IP "\fR#\fR" 8
+Specifies that the value is to be converted to an alternative form.
+For
+.BR o
+conversion, it shall increase the precision, if and only if necessary,
+to force the first digit of the result to be zero (if the value
+and precision are both 0, a single 0 is printed). For
+.BR x
+or
+.BR X
+conversion specifiers, a non-zero result shall have 0x (or 0X) prefixed
+to it. For
+.BR a ,
+.BR A ,
+.BR e ,
+.BR E ,
+.BR f ,
+.BR F ,
+.BR g ,
+and
+.BR G
+conversion specifiers, the result shall always contain a radix
+character, even if no digits follow it. Without this flag, a radix
+character appears in the result of these conversions only if a digit
+follows it. For
+.BR g
+and
+.BR G
+conversion specifiers, trailing zeros shall
+.IR not
+be removed from the result as they normally are. For other conversion
+specifiers, the behavior is undefined.
+.IP "\fR0\fR" 8
+For
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+.BR X ,
+.BR a ,
+.BR A ,
+.BR e ,
+.BR E ,
+.BR f ,
+.BR F ,
+.BR g ,
+and
+.BR G
+conversion specifiers, leading zeros (following any indication of sign
+or base) are used to pad to the field width rather than performing
+space padding, except when converting an infinity or NaN. If the
+.BR '0'
+and
+.BR '\-'
+flags both appear, the
+.BR '0'
+flag shall be ignored. For
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+and
+.BR X
+conversion specifiers, if a precision is specified, the
+.BR '0'
+flag shall be ignored.
+If the
+.BR '0'
+and
+<apostrophe>
+flags both appear, the grouping wide characters are inserted before
+zero padding. For other conversions, the behavior is undefined.
+.P
+The length modifiers and their meanings are:
+.IP "\fRhh\fR" 8
+Specifies that a following
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+or
+.BR X
+conversion specifier applies to a
+.BR "signed char"
+or
+.BR "unsigned char"
+argument (the argument will have been promoted according to the integer
+promotions, but its value shall be converted to
+.BR "signed char"
+or
+.BR "unsigned char"
+before printing); or that a following
+.BR n
+conversion specifier applies to a pointer to a
+.BR "signed char"
+argument.
+.IP "\fRh\fR" 8
+Specifies that a following
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+or
+.BR X
+conversion specifier applies to a
+.BR "short"
+or
+.BR "unsigned short"
+argument (the argument will have been promoted according to the integer
+promotions, but its value shall be converted to
+.BR "short"
+or
+.BR "unsigned short"
+before printing); or that a following
+.BR n
+conversion specifier applies to a pointer to a
+.BR "short"
+argument.
+.IP "\fRl\fR\ (ell)" 8
+Specifies that a following
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+or
+.BR X
+conversion specifier applies to a
+.BR "long"
+or
+.BR "unsigned long"
+argument; that a following
+.BR n
+conversion specifier applies to a pointer to a
+.BR "long"
+argument; that a following
+.BR c
+conversion specifier applies to a
+.BR wint_t
+argument; that a following
+.BR s
+conversion specifier applies to a pointer to a
+.BR wchar_t
+argument; or has no effect on a following
+.BR a ,
+.BR A ,
+.BR e ,
+.BR E ,
+.BR f ,
+.BR F ,
+.BR g ,
+or
+.BR G
+conversion specifier.
+.IP "\fRll\fR\ (ell-ell)" 8
+.br
+Specifies that a following
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+or
+.BR X
+conversion specifier applies to a
+.BR "long long"
+or
+.BR "unsigned long long"
+argument; or that a following
+.BR n
+conversion specifier applies to a pointer to a
+.BR "long long"
+argument.
+.IP "\fRj\fR" 8
+Specifies that a following
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+or
+.BR X
+conversion specifier applies to an
+.BR intmax_t
+or
+.BR uintmax_t
+argument; or that a following
+.BR n
+conversion specifier applies to a pointer to an
+.BR intmax_t
+argument.
+.IP "\fRz\fR" 8
+Specifies that a following
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+or
+.BR X
+conversion specifier applies to a
+.BR size_t
+or the corresponding signed integer type argument; or that a following
+.BR n
+conversion specifier applies to a pointer to a signed integer type
+corresponding to a
+.BR size_t
+argument.
+.IP "\fRt\fR" 8
+Specifies that a following
+.BR d ,
+.BR i ,
+.BR o ,
+.BR u ,
+.BR x ,
+or
+.BR X
+conversion specifier applies to a
+.BR ptrdiff_t
+or the corresponding
+.BR unsigned
+type argument; or that a following
+.BR n
+conversion specifier applies to a pointer to a
+.BR ptrdiff_t
+argument.
+.IP "\fRL\fR" 8
+Specifies that a following
+.BR a ,
+.BR A ,
+.BR e ,
+.BR E ,
+.BR f ,
+.BR F ,
+.BR g ,
+or
+.BR G
+conversion specifier applies to a
+.BR "long double"
+argument.
+.br
+.P
+If a length modifier appears with any conversion specifier other than
+as specified above, the behavior is undefined.
+.P
+The conversion specifiers and their meanings are:
+.IP "\fRd\fR,\ \fRi\fR" 8
+The
+.BR int
+argument shall be converted to a signed decimal in the style
+\fR"[\-]\fIdddd"\fR. The precision specifies the minimum number of
+digits to appear; if the value being converted can be represented in
+fewer digits, it shall be expanded with leading zeros. The default
+precision shall be 1. The result of converting zero with an explicit
+precision of zero shall be no wide characters.
+.IP "\fRo\fP" 8
+The
+.BR unsigned
+argument shall be converted to unsigned octal format in the style
+.BR \(dqdddd\(dq .
+The precision specifies the minimum number of digits to appear; if the
+value being converted can be represented in fewer digits, it shall be
+expanded with leading zeros. The default precision shall be 1. The
+result of converting zero with an explicit precision of zero shall be
+no wide characters.
+.IP "\fRu\fP" 8
+The
+.BR unsigned
+argument shall be converted to unsigned decimal format in the style
+.BR \(dqdddd\(dq .
+The precision specifies the minimum number of digits to appear; if the
+value being converted can be represented in fewer digits, it shall be
+expanded with leading zeros. The default precision shall be 1. The
+result of converting zero with an explicit precision of zero shall be
+no wide characters.
+.IP "\fRx\fP" 8
+The
+.BR unsigned
+argument shall be converted to unsigned hexadecimal format in the style
+.BR \(dqdddd\(dq ;
+the letters
+.BR \(dqabcdef\(dq
+are used. The precision specifies the minimum number of digits to
+appear; if the value being converted can be represented in fewer
+digits, it shall be expanded with leading zeros. The default precision
+shall be 1. The result of converting zero with an explicit precision of
+zero shall be no wide characters.
+.IP "\fRX\fP" 8
+Equivalent to the
+.BR x
+conversion specifier, except that letters
+.BR \(dqABCDEF\(dq
+are used instead of
+.BR \(dqabcdef\(dq .
+.IP "\fRf\fR,\ \fRF\fR" 8
+The
+.BR double
+argument shall be converted to decimal notation in the style
+\fR"[\-]\fIddd.ddd"\fR, where the number of digits after the radix
+character shall be equal to the precision specification. If the
+precision is missing, it shall be taken as 6; if the precision is
+explicitly zero and no
+.BR '#'
+flag is present, no radix character shall appear. If a radix character
+appears, at least one digit shall appear before it. The value shall be
+rounded in an implementation-defined manner to the appropriate number
+of digits.
+.RS 8
+.P
+A
+.BR double
+argument representing an infinity shall be converted in one of the
+styles
+.BR \(dq[-]inf\(dq
+or
+.BR \(dq[-]infinity\(dq ;
+which style is implementation-defined. A
+.BR double
+argument representing a NaN shall be converted in one of the styles
+.BR \(dq[-]nan\(dq
+or \fR"[\-]nan(\fIn-char-sequence\fR)"\fR; which style, and the
+meaning of any \fIn-char-sequence\fR, is implementation-defined. The
+.BR F
+conversion specifier produces
+.BR \(dqINF\(dq ,
+.BR \(dqINFINITY\(dq ,
+or
+.BR \(dqNAN\(dq
+instead of
+.BR \(dqinf\(dq ,
+.BR \(dqinfinity\(dq ,
+or
+.BR \(dqnan\(dq ,
+respectively.
+.RE
+.IP "\fRe\fR,\ \fRE\fR" 8
+The
+.BR double
+argument shall be converted in the style
+\fR"[\-]\fId.ddd\fRe\fR\(+-dd"\fR, where there shall be one digit
+before the radix character (which is non-zero if the argument is
+non-zero) and the number of digits after it shall be equal to the
+precision; if the precision is missing, it shall be taken as 6; if the
+precision is zero and no
+.BR '#'
+flag is present, no radix character shall appear. The value shall be
+rounded in an implementation-defined manner to the appropriate number
+of digits. The
+.BR E
+conversion wide character shall produce a number with
+.BR 'E'
+instead of
+.BR 'e'
+introducing the exponent. The exponent shall always contain at least
+two digits. If the value is zero, the exponent shall be zero.
+.RS 8
+.P
+A
+.BR double
+argument representing an infinity or NaN shall be converted in the
+style of an
+.BR f
+or
+.BR F
+conversion specifier.
+.RE
+.IP "\fRg\fR,\ \fRG\fR" 8
+The
+.BR double
+argument representing a floating-point number shall be converted in the
+style
+.BR f
+or
+.BR e
+(or in the style
+.BR F
+or
+.BR E
+in the case of a
+.BR G
+conversion specifier), depending on the value converted and the precision.
+Let
+.BR P
+equal the precision if non-zero, 6 if the precision is omitted, or 1 if the
+precision is zero. Then, if a conversion with style
+.BR E
+would have an exponent of
+.IR X :
+.RS 8
+.IP -- 4
+If
+.BR P >\c
+.IR X \(>=\-4,
+the conversion shall be with style
+.BR f
+(or
+.BR F )
+and precision
+.BR P \-(\c
+.IR X +1).
+.IP -- 4
+Otherwise, the conversion shall be with style
+.BR e
+(or
+.BR E )
+and precision
+.BR P \-1.
+.P
+Finally, unless the
+.BR '#'
+flag is used, any trailing zeros shall be removed from the fractional
+portion of the result and the decimal-point character shall be removed
+if there is no fractional portion remaining.
+.P
+A
+.BR double
+argument representing an infinity or NaN shall be converted in the
+style of an
+.BR f
+or
+.BR F
+conversion specifier.
+.RE
+.IP "\fRa\fR,\ \fRA\fR" 8
+A
+.BR double
+argument representing a floating-point number shall be converted in
+the style \fR"[\-]0x\fIh\fR.\fIhhhh\fRp\(+-\fId\fR"\fR, where there
+shall be one hexadecimal digit (which is non-zero if the argument is a
+normalized floating-point number and is otherwise unspecified) before
+the decimal-point wide character and the number of hexadecimal digits
+after it shall be equal to the precision; if the precision is missing
+and FLT_RADIX is a power of 2, then the precision shall be sufficient
+for an exact representation of the value; if the precision is missing
+and FLT_RADIX is not a power of 2, then the precision shall be sufficient
+to distinguish values of type
+.BR double ,
+except that trailing zeros may be omitted; if the precision is zero and
+the
+.BR '#'
+flag is not specified, no decimal-point wide character shall appear.
+The letters
+.BR \(dqabcdef\(dq
+are used for
+.BR a
+conversion and the letters
+.BR \(dqABCDEF\(dq
+for
+.BR A
+conversion. The
+.BR A
+conversion specifier produces a number with
+.BR 'X'
+and
+.BR 'P'
+instead of
+.BR 'x'
+and
+.BR 'p' .
+The exponent shall always contain at least one digit, and only as many
+more digits as necessary to represent the decimal exponent of 2. If the
+value is zero, the exponent shall be zero.
+.RS 8
+.P
+A
+.BR double
+argument representing an infinity or NaN shall be converted in the
+style of an
+.BR f
+or
+.BR F
+conversion specifier.
+.RE
+.IP "\fRc\fP" 8
+If no
+.BR l
+(ell) qualifier is present, the
+.BR int
+argument shall be converted to a wide character as if by calling the
+\fIbtowc\fR()
+function and the resulting wide character shall be written. Otherwise,
+the
+.BR wint_t
+argument shall be converted to
+.BR wchar_t ,
+and written.
+.IP "\fRs\fP" 8
+If no
+.BR l
+(ell) qualifier is present, the application shall ensure that the
+argument is a pointer to a character array containing a character
+sequence beginning in the initial shift state. Characters from the
+array shall be converted as if by repeated calls to the
+\fImbrtowc\fR()
+function, with the conversion state described by an
+.BR mbstate_t
+object initialized to zero before the first character is converted, and
+written up to (but not including) the terminating null wide character.
+If the precision is specified, no more than that many wide characters
+shall be written. If the precision is not specified, or is greater than
+the size of the array, the application shall ensure that the array
+contains a null wide character.
+.RS 8
+.P
+If an
+.BR l
+(ell) qualifier is present, the application shall ensure that the
+argument is a pointer to an array of type
+.BR wchar_t .
+Wide characters from the array shall be written up to (but not
+including) a terminating null wide character. If no precision is
+specified, or is greater than the size of the array, the application
+shall ensure that the array contains a null wide character. If a
+precision is specified, no more than that many wide characters shall be
+written.
+.RE
+.IP "\fRp\fP" 8
+The application shall ensure that the argument is a pointer to
+.BR void .
+The value of the pointer shall be converted to a sequence of printable
+wide characters in an implementation-defined manner.
+.IP "\fRn\fP" 8
+The application shall ensure that the argument is a pointer to an
+integer into which is written the number of wide characters written to
+the output so far by this call to one of the
+\fIfwprintf\fR()
+functions. No argument shall be converted, but one shall be consumed.
+If the conversion specification includes any flags, a field width, or a
+precision, the behavior is undefined.
+.IP "\fRC\fP" 8
+Equivalent to
+.BR lc .
+.IP "\fRS\fP" 8
+Equivalent to
+.BR ls .
+.IP "\fR%\fR" 8
+Output a
+.BR '%'
+wide character; no argument shall be converted. The entire conversion
+specification shall be
+.BR %% .
+.P
+If a conversion specification does not match one of the above forms,
+the behavior is undefined.
+.P
+In no case does a nonexistent or small field width cause truncation of
+a field; if the result of a conversion is wider than the field width,
+the field shall be expanded to contain the conversion result.
+Characters generated by
+\fIfwprintf\fR()
+and
+\fIwprintf\fR()
+shall be printed as if
+\fIfputwc\fR()
+had been called.
+.P
+For
+.BR a
+and
+.BR A
+conversions, if FLT_RADIX is not a power of 2 and the result is not
+exactly representable in the given precision, the result should be one
+of the two adjacent numbers in hexadecimal floating style with the
+given precision, with the extra stipulation that the error should have
+a correct sign for the current rounding direction.
+.P
+For
+.BR e ,
+.BR E ,
+.BR f ,
+.BR F ,
+.BR g ,
+and
+.BR G
+conversion specifiers, if the number of significant decimal digits is
+at most DECIMAL_DIG, then the result should be correctly rounded. If
+the number of significant decimal digits is more than DECIMAL_DIG but
+the source value is exactly representable with DECIMAL_DIG digits, then
+the result should be an exact representation with trailing zeros.
+Otherwise, the source value is bounded by two adjacent decimal strings
+.IR L
+<
+.IR U ,
+both having DECIMAL_DIG significant digits; the value of the resultant
+decimal string
+.IR D
+should satisfy
+.IR L
+<=
+.IR D
+<=
+.IR U ,
+with the extra stipulation that the error should have a correct sign
+for the current rounding direction.
+.P
+The last data modification and last file status change timestamps
+of the file shall be marked for update between the call to a
+successful execution of
+\fIfwprintf\fR()
+or
+\fIwprintf\fR()
+and the next successful completion of a call to
+\fIfflush\fR()
+or
+\fIfclose\fR()
+on the same stream, or a call to
+\fIexit\fR()
+or
+\fIabort\fR().
+.SH "RETURN VALUE"
+Upon successful completion, these functions shall return the number of
+wide characters transmitted, excluding the terminating null wide character
+in the case of
+\fIswprintf\fR(),
+or a negative value if an output error was encountered,
+and set
+.IR errno
+to indicate the error.
+.P
+If
+.IR n
+or more wide characters were requested to be written,
+\fIswprintf\fR()
+shall return a negative value,
+and set
+.IR errno
+to indicate the error.
+.SH ERRORS
+For the conditions under which
+\fIfwprintf\fR()
+and
+\fIwprintf\fR()
+fail and may fail, refer to
+.IR "\fIfputwc\fR\^(\|)".
+.P
+In addition, all forms of
+\fIfwprintf\fR()
+shall fail if:
+.TP
+.BR EILSEQ
+A wide-character code that does not correspond to a valid character has
+been detected.
+.P
+In addition,
+\fIfwprintf\fR()
+and
+\fIwprintf\fR()
+may fail if:
+.TP
+.BR ENOMEM
+Insufficient storage space is available.
+.P
+The
+\fIswprintf\fR()
+shall fail if:
+.TP
+.BR EOVERFLOW
+The value of
+.IR n
+is greater than
+{INT_MAX}
+or the number of bytes needed to hold the output excluding the
+terminating null is greater than
+{INT_MAX}.
+.LP
+.IR "The following sections are informative."
+.SH "EXAMPLES"
+To print the language-independent date and time format, the following
+statement could be used:
+.sp
+.RS 4
+.nf
+
+wprintf(format, weekday, month, day, hour, min);
+.fi
+.P
+.RE
+.P
+For American usage,
+.IR format
+could be a pointer to the wide-character string:
+.sp
+.RS 4
+.nf
+
+L"%s, %s %d, %d:%.2d\en"
+.fi
+.P
+.RE
+.P
+producing the message:
+.sp
+.RS 4
+.nf
+
+Sunday, July 3, 10:02
+.fi
+.P
+.RE
+.P
+whereas for German usage,
+.IR format
+could be a pointer to the wide-character string:
+.sp
+.RS 4
+.nf
+
+L"%1$s, %3$d. %2$s, %4$d:%5$.2d\en"
+.fi
+.P
+.RE
+.P
+producing the message:
+.sp
+.RS 4
+.nf
+
+Sonntag, 3. Juli, 10:02
+.fi
+.P
+.RE
+.SH "APPLICATION USAGE"
+None.
+.SH RATIONALE
+If an implementation detects that there are insufficient
+arguments for the format, it is recommended that the function
+should fail and report an
+.BR [EINVAL]
+error.
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "Section 2.5" ", " "Standard I/O Streams",
+.IR "\fIbtowc\fR\^(\|)",
+.IR "\fIfputwc\fR\^(\|)",
+.IR "\fIfwscanf\fR\^(\|)",
+.IR "\fImbrtowc\fR\^(\|)",
+.IR "\fIsetlocale\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "Chapter 7" ", " "Locale",
+.IR "\fB<inttypes.h>\fP",
+.IR "\fB<stdio.h>\fP",
+.IR "\fB<wchar.h>\fP"
+.\"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1-2017, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, 2018 Edition,
+Copyright (C) 2018 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+In the event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .
+.PP
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .