1 /*
2  * Copyright (c) 1990 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * and/or other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 /*
19 FUNCTION
20 <<sprintf>>, <<fprintf>>, <<printf>>, <<snprintf>>, <<asprintf>>, <<asnprintf>>---format output
21 
22 INDEX
23 	fprintf
24 INDEX
25 	_fprintf_r
26 INDEX
27 	printf
28 INDEX
29 	_printf_r
30 INDEX
31 	asprintf
32 INDEX
33 	_asprintf_r
34 INDEX
35 	sprintf
36 INDEX
37 	_sprintf_r
38 INDEX
39 	snprintf
40 INDEX
41 	_snprintf_r
42 INDEX
43 	asnprintf
44 INDEX
45 	_asnprintf_r
46 
47 SYNOPSIS
48         #include <stdio.h>
49 
50         int printf(const char *restrict <[format]>, ...);
51         int fprintf(FILE *restrict <[fd]>, const char *restrict <[format]>, ...);
52         int sprintf(char *restrict <[str]>, const char *restrict <[format]>, ...);
53         int snprintf(char *restrict <[str]>, size_t <[size]>, const char *restrict <[format]>,
54                      ...);
55         int asprintf(char **restrict <[strp]>, const char *restrict <[format]>, ...);
56         char *asnprintf(char *restrict <[str]>, size_t *restrict <[size]>, const char *restrict <[format]>,
57                         ...);
58 
59         int printf( const char *restrict <[format]>, ...);
60         int fprintf( FILE *restrict <[fd]>,
61                        const char *restrict <[format]>, ...);
62         int sprintf( char *restrict <[str]>,
63                        const char *restrict <[format]>, ...);
64         int snprintf( char *restrict <[str]>, size_t <[size]>,
65                         const char *restrict <[format]>, ...);
66         int asprintf( char **restrict <[strp]>,
67                         const char *restrict <[format]>, ...);
68         char *asnprintf( char *restrict <[str]>,
69                            size_t *restrict <[size]>, const char *restrict <[format]>, ...);
70 
71 DESCRIPTION
72         <<printf>> accepts a series of arguments, applies to each a
73         format specifier from <<*<[format]>>>, and writes the
74         formatted data to <<stdout>>, without a terminating NUL
75         character.  The behavior of <<printf>> is undefined if there
76         are not enough arguments for the format.  <<printf>> returns
77         when it reaches the end of the format string.  If there are
78         more arguments than the format requires, excess arguments are
79         ignored.
80 
81         <<fprintf>> is like <<printf>>, except that output is directed
82         to the stream <[fd]> rather than <<stdout>>.
83 
84         <<sprintf>> is like <<printf>>, except that output is directed
85         to the buffer <[str]>, and a terminating NUL is output.
86         Behavior is undefined if more output is generated than the
87         buffer can hold.
88 
89         <<snprintf>> is like <<sprintf>>, except that output is
90         limited to at most <[size]> bytes, including the terminating
91         <<NUL>>.  As a special case, if <[size]> is 0, <[str]> can be
92         NULL, and <<snprintf>> merely calculates how many bytes would
93         be printed.
94 
95         <<asprintf>> is like <<sprintf>>, except that the output is
96         stored in a dynamically allocated buffer, <[pstr]>, which
97         should be freed later with <<free>>.
98 
99         <<asnprintf>> is like <<sprintf>>, except that the return type
100         is either the original <[str]> if it was large enough, or a
101         dynamically allocated string if the output exceeds *<[size]>;
102         the length of the result is returned in *<[size]>.  When
103         dynamic allocation occurs, the contents of the original
104         <[str]> may have been modified.
105 
106         For <<sprintf>>, <<snprintf>>, and <<asnprintf>>, the behavior
107 	is undefined if the output <<*<[str]>>> overlaps with one of
108 	the arguments.  Behavior is also undefined if the argument for
109 	<<%n>> within <<*<[format]>>> overlaps another argument.
110 
111         <[format]> is a pointer to a character string containing two
112 	types of objects: ordinary characters (other than <<%>>),
113 	which are copied unchanged to the output, and conversion
114 	specifications, each of which is introduced by <<%>>. (To
115 	include <<%>> in the output, use <<%%>> in the format string.)
116 	A conversion specification has the following form:
117 
118 .       %[<[pos]>][<[flags]>][<[width]>][.<[prec]>][<[size]>]<[type]>
119 
120         The fields of the conversion specification have the following
121         meanings:
122 
123         O+
124 	o <[pos]>
125 
126         Conversions normally consume arguments in the order that they
127         are presented.  However, it is possible to consume arguments
128         out of order, and reuse an argument for more than one
129         conversion specification (although the behavior is undefined
130         if the same argument is requested with different types), by
131         specifying <[pos]>, which is a decimal integer followed by
132         '$'.  The integer must be between 1 and <NL_ARGMAX> from
133         limits.h, and if argument <<%n$>> is requested, all earlier
134         arguments must be requested somewhere within <[format]>.  If
135         positional parameters are used, then all conversion
136         specifications except for <<%%>> must specify a position.
137 	This positional parameters method is a POSIX extension to the C
138 	standard definition for the functions.
139 
140 	o <[flags]>
141 
142 	<[flags]> is an optional sequence of characters which control
143 	output justification, numeric signs, decimal points, trailing
144 	zeros, and octal and hex prefixes.  The flag characters are
145 	minus (<<->>), plus (<<+>>), space ( ), zero (<<0>>), sharp
146 	(<<#>>), and quote (<<'>>).  They can appear in any
147 	combination, although not all flags can be used for all
148 	conversion specification types.
149 
150 		o+
151 		o '
152 			A POSIX extension to the C standard.  However, this
153 			implementation presently treats it as a no-op, which
154 			is the default behavior for the C locale, anyway.  (If
155 			it did what it is supposed to, when <[type]> were <<i>>,
156 			<<d>>, <<u>>, <<f>>, <<F>>, <<g>>, or <<G>>, the
157 			integer portion of the conversion would be formatted
158 			with thousands' grouping wide characters.)
159 
160 		o -
161 			The result of the conversion is left
162 			justified, and the right is padded with
163 			blanks.  If you do not use this flag, the
164 			result is right justified, and padded on the
165 			left.
166 
167 	        o +
168 			The result of a signed conversion (as
169 			determined by <[type]> of <<d>>, <<i>>, <<a>>,
170 			<<A>>, <<e>>, <<E>>, <<f>>, <<F>>, <<g>>, or
171 			<<G>>) will always begin with a plus or minus
172 			sign.  (If you do not use this flag, positive
173 			values do not begin with a plus sign.)
174 
175 		o " " (space)
176 			If the first character of a signed conversion
177 		        specification is not a sign, or if a signed
178 		        conversion results in no characters, the
179 		        result will begin with a space.  If the space
180 		        ( ) flag and the plus (<<+>>) flag both
181 		        appear, the space flag is ignored.
182 
183 	        o 0
184 			If the <[type]> character is <<d>>, <<i>>,
185 			<<o>>, <<u>>, <<x>>, <<X>>, <<a>>, <<A>>,
186 			<<e>>, <<E>>, <<f>>, <<F>>, <<g>>, or <<G>>:  leading
187 			zeros are used to pad the field width
188 			(following any indication of sign or base); no
189 			spaces are used for padding.  If the zero
190 			(<<0>>) and minus (<<->>) flags both appear,
191 			the zero (<<0>>) flag will be ignored.  For
192 			<<d>>, <<i>>, <<o>>, <<u>>, <<x>>, and <<X>>
193 			conversions, if a precision <[prec]> is
194 			specified, the zero (<<0>>) flag is ignored.
195 
196 			Note that <<0>> is interpreted as a flag, not
197 		        as the beginning of a field width.
198 
199 	        o #
200 			The result is to be converted to an
201 			alternative form, according to the <[type]>
202 			character.
203 		o-
204 
205 	The alternative form output with the # flag depends on the <[type]>
206 	character:
207 
208 		o+
209 		o o
210 			Increases precision to force the first
211 			digit of the result to be a zero.
212 
213 		o x
214 			A non-zero result will have a <<0x>>
215 			prefix.
216 
217 		o X
218 			A non-zero result will have a <<0X>>
219 			prefix.
220 
221 		o a, A, e, E, f, or F
222 			The result will always contain a
223 			decimal point even if no digits follow
224 			the point.  (Normally, a decimal point
225 			appears only if a digit follows it.)
226 			Trailing zeros are removed.
227 
228 		o g or G
229 			The result will always contain a
230 			decimal point even if no digits follow
231 			the point.  Trailing zeros are not
232 			removed.
233 
234 		o all others
235 			Undefined.
236 
237 		o-
238 
239 	o <[width]>
240 
241 		<[width]> is an optional minimum field width.  You can
242 		either specify it directly as a decimal integer, or
243 		indirectly by using instead an asterisk (<<*>>), in
244 		which case an <<int>> argument is used as the field
245 		width.  If positional arguments are used, then the
246 		width must also be specified positionally as <<*m$>>,
247 		with m as a decimal integer.  Negative field widths
248 		are treated as specifying the minus (<<->>) flag for
249 		left justfication, along with a positive field width.
250 		The resulting format may be wider than the specified
251 		width.
252 
253 	o <[prec]>
254 
255 		<[prec]> is an optional field; if present, it is
256 		introduced with `<<.>>' (a period). You can specify
257 		the precision either directly as a decimal integer or
258 		indirectly by using an asterisk (<<*>>), in which case
259 		an <<int>> argument is used as the precision.  If
260 		positional arguments are used, then the precision must
261 		also be specified positionally as <<*m$>>, with m as a
262 		decimal integer.  Supplying a negative precision is
263 		equivalent to omitting the precision.  If only a
264 		period is specified the precision is zero. The effect
265 		depends on the conversion <[type]>.
266 
267 		o+
268 		o d, i, o, u, x, or X
269 			Minimum number of digits to appear.  If no
270 			precision is given, defaults to 1.
271 
272 		o a or A
273 			Number of digits to appear after the decimal
274 			point.  If no precision is given, the
275 			precision defaults to the minimum needed for
276 			an exact representation.
277 
278 		o e, E, f or F
279 			Number of digits to appear after the decimal
280 			point.  If no precision is given, the
281 			precision defaults to 6.
282 
283 		o g or G
284 			Maximum number of significant digits.  A
285 			precision of 0 is treated the same as a
286 			precision of 1.  If no precision is given, the
287 			precision defaults to 6.
288 
289 		o s or S
290 			Maximum number of characters to print from the
291 			string.  If no precision is given, the entire
292 			string is printed.
293 
294 		o all others
295 			undefined.
296 
297 		o-
298 
299 	o <[size]>
300 
301 		<[size]> is an optional modifier that changes the data
302 		type that the corresponding argument has.  Behavior is
303 		unspecified if a size is given that does not match the
304 		<[type]>.
305 
306 		o+
307 		o hh
308 			With <<d>>, <<i>>, <<o>>, <<u>>, <<x>>, or
309 			<<X>>, specifies that the argument should be
310 			converted to a <<signed char>> or <<unsigned
311 			char>> before printing.
312 
313 			With <<n>>, specifies that the argument is a
314 			pointer to a <<signed char>>.
315 
316 		o h
317 			With <<d>>, <<i>>, <<o>>, <<u>>, <<x>>, or
318 			<<X>>, specifies that the argument should be
319 			converted to a <<short>> or <<unsigned short>>
320 			before printing.
321 
322 			With <<n>>, specifies that the argument is a
323 			pointer to a <<short>>.
324 
325 		o l
326 			With <<d>>, <<i>>, <<o>>, <<u>>, <<x>>, or
327 			<<X>>, specifies that the argument is a
328 			<<long>> or <<unsigned long>>.
329 
330 			With <<c>>, specifies that the argument has
331 			type <<wint_t>>.
332 
333 			With <<s>>, specifies that the argument is a
334 			pointer to <<wchar_t>>.
335 
336 			With <<n>>, specifies that the argument is a
337 			pointer to a <<long>>.
338 
339 			With <<a>>, <<A>>, <<e>>, <<E>>, <<f>>, <<F>>,
340 			<<g>>, or <<G>>, has no effect (because of
341 			vararg promotion rules, there is no need to
342 			distinguish between <<float>> and <<double>>).
343 
344 		o ll
345 			With <<d>>, <<i>>, <<o>>, <<u>>, <<x>>, or
346 			<<X>>, specifies that the argument is a
347 			<<long long>> or <<unsigned long long>>.
348 
349 			With <<n>>, specifies that the argument is a
350 			pointer to a <<long long>>.
351 
352 		o j
353 			With <<d>>, <<i>>, <<o>>, <<u>>, <<x>>, or
354 			<<X>>, specifies that the argument is an
355 			<<intmax_t>> or <<uintmax_t>>.
356 
357 			With <<n>>, specifies that the argument is a
358 			pointer to an <<intmax_t>>.
359 
360 		o z
361 			With <<d>>, <<i>>, <<o>>, <<u>>, <<x>>, or
362 			<<X>>, specifies that the argument is a <<size_t>>.
363 
364 			With <<n>>, specifies that the argument is a
365 			pointer to a <<size_t>>.
366 
367 		o t
368 			With <<d>>, <<i>>, <<o>>, <<u>>, <<x>>, or
369 			<<X>>, specifies that the argument is a
370 			<<ptrdiff_t>>.
371 
372 			With <<n>>, specifies that the argument is a
373 			pointer to a <<ptrdiff_t>>.
374 
375 		o L
376 			With <<a>>, <<A>>, <<e>>, <<E>>, <<f>>, <<F>>,
377 			<<g>>, or <<G>>, specifies that the argument
378 			is a <<long double>>.
379 
380 		o-
381 
382 	o   <[type]>
383 
384 		<[type]> specifies what kind of conversion <<printf>>
385 		performs.  Here is a table of these:
386 
387 		o+
388 		o %
389 			Prints the percent character (<<%>>).
390 
391 		o c
392 			Prints <[arg]> as single character.  If the
393 			<<l>> size specifier is in effect, a multibyte
394 			character is printed.
395 
396 		o C
397 			Short for <<%lc>>.  A POSIX extension to the C standard.
398 
399 		o s
400 			Prints the elements of a pointer to <<char>>
401 			until the precision or a null character is
402 			reached.  If the <<l>> size specifier is in
403 			effect, the pointer is to an array of
404 			<<wchar_t>>, and the string is converted to
405 			multibyte characters before printing.
406 
407 		o S
408 			Short for <<%ls>>.  A POSIX extension to the C standard.
409 
410 		o d or i
411 			Prints a signed decimal integer; takes an
412 			<<int>>.  Leading zeros are inserted as
413 			necessary to reach the precision.  A value of 0 with
414 			a precision of 0 produces an empty string.
415 
416 		o D
417 			Newlib extension, short for <<%ld>>.
418 
419 		o o
420 			Prints an unsigned octal integer; takes an
421 			<<unsigned>>.  Leading zeros are inserted as
422 			necessary to reach the precision.  A value of 0 with
423 			a precision of 0 produces an empty string.
424 
425 		o O
426 			Newlib extension, short for <<%lo>>.
427 
428 		o u
429 			Prints an unsigned decimal integer; takes an
430 			<<unsigned>>.  Leading zeros are inserted as
431 			necessary to reach the precision.  A value of 0 with
432 			a precision of 0 produces an empty string.
433 
434 		o U
435 			Newlib extension, short for <<%lu>>.
436 
437 		o x
438 			Prints an unsigned hexadecimal integer (using
439 			<<abcdef>> as digits beyond <<9>>); takes an
440 			<<unsigned>>.  Leading zeros are inserted as
441 			necessary to reach the precision.  A value of 0 with
442 			a precision of 0 produces an empty string.
443 
444 		o X
445 			Like <<x>>, but uses <<ABCDEF>> as digits
446 			beyond <<9>>.
447 
448 		o f
449 			Prints a signed value of the form
450 			<<[-]9999.9999>>, with the precision
451 			determining how many digits follow the decimal
452 			point; takes a <<double>> (remember that
453 			<<float>> promotes to <<double>> as a vararg).
454 			The low order digit is rounded to even.  If
455 			the precision results in at most DECIMAL_DIG
456 			digits, the result is rounded correctly; if
457 			more than DECIMAL_DIG digits are printed, the
458 			result is only guaranteed to round back to the
459 			original value.
460 
461 			If the value is infinite, the result is
462 			<<inf>>, and no zero padding is performed.  If
463 			the value is not a number, the result is
464 			<<nan>>, and no zero padding is performed.
465 
466 		o F
467 			Like <<f>>, but uses <<INF>> and <<NAN>> for
468 			non-finite numbers.
469 
470 		o e
471 			Prints a signed value of the form
472 			<<[-]9.9999e[+|-]999>>; takes a <<double>>.
473 			The digit before the decimal point is non-zero
474 			if the value is non-zero.  The precision
475 			determines how many digits appear between
476 			<<.>> and <<e>>, and the exponent always
477 			contains at least two digits.  The value zero
478 			has an exponent of zero.  If the value is not
479 			finite, it is printed like <<f>>.
480 
481 		o E
482 			Like <<e>>, but using <<E>> to introduce the
483 			exponent, and like <<F>> for non-finite
484 			values.
485 
486 		o g
487 			Prints a signed value in either <<f>> or <<e>>
488 			form, based on the given value and
489 			precision---an exponent less than -4 or
490 			greater than the precision selects the <<e>>
491 			form.  Trailing zeros and the decimal point
492 			are printed only if necessary; takes a
493 			<<double>>.
494 
495 		o G
496 			Like <<g>>, except use <<F>> or <<E>> form.
497 
498 		o a
499 			Prints a signed value of the form
500 			<<[-]0x1.ffffp[+|-]9>>; takes a <<double>>.
501 			The letters <<abcdef>> are used for digits
502 			beyond <<9>>.  The precision determines how
503 			many digits appear after the decimal point.
504 			The exponent contains at least one digit, and
505 			is a decimal value representing the power of
506 			2; a value of 0 has an exponent of 0.
507 			Non-finite values are printed like <<f>>.
508 
509 		o A
510 			Like <<a>>, except uses <<X>>, <<P>>, and
511 			<<ABCDEF>> instead of lower case.
512 
513 		o n
514 			Takes a pointer to <<int>>, and stores a count
515 			of the number of bytes written so far.  No
516 			output is created.
517 
518 		o p
519 			Takes a pointer to <<void>>, and prints it in
520 			an implementation-defined format.  This
521 			implementation is similar to <<%#tx>>), except
522 			that <<0x>> appears even for the NULL pointer.
523 
524 		o m
525 			Prints the output of <<strerror(errno)>>; no
526 			argument is required.  A GNU extension.
527 
528 		o-
529 	O-
530 
531         <<_printf_r>>, <<_fprintf_r>>, <<_asprintf_r>>,
532         <<_sprintf_r>>, <<_snprintf_r>>, <<_asnprintf_r>> are simply
533         reentrant versions of the functions above.
534 
535 RETURNS
536 On success, <<sprintf>> and <<asprintf>> return the number of bytes in
537 the output string, except the concluding <<NUL>> is not counted.
538 <<snprintf>> returns the number of bytes that would be in the output
539 string, except the concluding <<NUL>> is not counted.  <<printf>> and
540 <<fprintf>> return the number of characters transmitted.
541 <<asnprintf>> returns the original <[str]> if there was enough room,
542 otherwise it returns an allocated string.
543 
544 If an error occurs, the result of <<printf>>, <<fprintf>>,
545 <<snprintf>>, and <<asprintf>> is a negative value, and the result of
546 <<asnprintf>> is NULL.  No error returns occur for <<sprintf>>.  For
547 <<printf>> and <<fprintf>>, <<errno>> may be set according to
548 <<fputc>>.  For <<asprintf>> and <<asnprintf>>, <<errno>> may be set
549 to ENOMEM if allocation fails, and for <<snprintf>>, <<errno>> may be
550 set to EOVERFLOW if <[size]> or the output length exceeds INT_MAX.
551 
552 BUGS
553 The ``''' (quote) flag does not work when locale's thousands_sep is not empty.
554 
555 PORTABILITY
556 ANSI C requires <<printf>>, <<fprintf>>, <<sprintf>>, and
557 <<snprintf>>.  <<asprintf>> and <<asnprintf>> are newlib extensions.
558 
559 The ANSI C standard specifies that implementations must support at
560 least formatted output of up to 509 characters.  This implementation
561 has no inherent limit.
562 
563 Depending on how newlib was configured, not all format specifiers are
564 supported.
565 
566 Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
567 <<lseek>>, <<read>>, <<sbrk>>, <<write>>.
568 */
569 
570 #define _DEFAULT_SOURCE
571 #include <_ansi.h>
572 #include <stdio.h>
573 #include <stdarg.h>
574 #include <limits.h>
575 #include "local.h"
576 
577 #undef sprintf
578 
579 int
sprintf(char * __restrict str,const char * __restrict fmt,...)580 sprintf (
581        char *__restrict str,
582        const char *__restrict fmt, ...)
583 {
584   int ret;
585   va_list ap;
586   FILE f;
587 
588   f._flags = __SWR | __SSTR;
589   f._flags2 = 0;
590   f._bf._base = f._p = (unsigned char *) str;
591   f._bf._size = f._w = INT_MAX;
592   f._file = -1;  /* No file. */
593   va_start (ap, fmt);
594   ret = svfprintf ( &f, fmt, ap);
595   va_end (ap);
596   *f._p = '\0';	/* terminate the string */
597   return (ret);
598 }
599 
600 #ifdef _NANO_FORMATTED_IO
601 int
602 siprintf (char *, const char *, ...)
603        _ATTRIBUTE ((__alias__("sprintf")));
604 #endif
605 
606 #ifdef __LONG_DOUBLE_IEEE128__
607 #if defined(_HAVE_ALIAS_ATTRIBUTE)
608 #ifndef __clang__
609 #pragma GCC diagnostic ignored "-Wmissing-attributes"
610 #endif
611 __strong_reference(sprintf, __sprintfieee128);
612 #endif
613 #endif
614