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 <<siprintf>>, <<fiprintf>>, <<iprintf>>, <<sniprintf>>, <<asiprintf>>, <<asniprintf>>---format output (integer only)
21 
22 INDEX
23 	fiprintf
24 INDEX
25 	_fiprintf_r
26 INDEX
27 	iprintf
28 INDEX
29 	_iprintf_r
30 INDEX
31 	siprintf
32 INDEX
33 	_siprintf_r
34 INDEX
35 	sniprintf
36 INDEX
37 	_sniprintf_r
38 INDEX
39 	asiprintf
40 INDEX
41 	_asiprintf_r
42 INDEX
43 	asniprintf
44 INDEX
45 	_asniprintf_r
46 
47 SYNOPSIS
48         #include <stdio.h>
49 
50         int iprintf(const char *<[format]>, ...);
51         int fiprintf(FILE *<[fd]>, const char *<[format]> , ...);
52         int siprintf(char *<[str]>, const char *<[format]>, ...);
53         int sniprintf(char *<[str]>, size_t <[size]>, const char *<[format]>,
54 			...);
55         int asiprintf(char **<[strp]>, const char *<[format]>, ...);
56         char *asniprintf(char *<[str]>, size_t *<[size]>,
57 			const char *<[format]>, ...);
58 
59         int iprintf( const char *<[format]>, ...);
60         int fiprintf( FILE *<[fd]>,
61                         const char *<[format]>, ...);
62         int siprintf( char *<[str]>,
63                         const char *<[format]>, ...);
64         int sniprintf( char *<[str]>, size_t <[size]>,
65                          const char *<[format]>, ...);
66         int asiprintf( char **<[strp]>,
67                          const char *<[format]>, ...);
68         char *asniprintf( char *<[str]>,
69                             size_t *<[size]>, const char *<[format]>, ...);
70 
71 DESCRIPTION
72         <<iprintf>>, <<fiprintf>>, <<siprintf>>, <<sniprintf>>,
73         <<asiprintf>>, and <<asniprintf>> are the same as <<printf>>,
74         <<fprintf>>, <<sprintf>>, <<snprintf>>, <<asprintf>>, and
75         <<asnprintf>>, respectively, except that they restrict usage
76         to non-floating-point format specifiers.
77 
78         <<_iprintf_r>>, <<_fiprintf_r>>, <<_asiprintf_r>>,
79         <<_siprintf_r>>, <<_sniprintf_r>>, <<_asniprintf_r>> are
80         simply reentrant versions of the functions above.
81 
82 RETURNS
83 Similar to <<printf>>, <<fprintf>>, <<sprintf>>, <<snprintf>>, <<asprintf>>,
84 and <<asnprintf>>.
85 
86 PORTABILITY
87 <<iprintf>>, <<fiprintf>>, <<siprintf>>, <<sniprintf>>, <<asiprintf>>,
88 and <<asniprintf>> are newlib extensions.
89 
90 Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
91 <<lseek>>, <<read>>, <<sbrk>>, <<write>>.
92 */
93 
94 #define _DEFAULT_SOURCE
95 #include <_ansi.h>
96 #include <stdio.h>
97 #include <stdarg.h>
98 #include <limits.h>
99 #include "local.h"
100 
101 int
siprintf(char * str,const char * fmt,...)102 siprintf (
103        char *str,
104        const char *fmt, ...)
105 {
106   int ret;
107   va_list ap;
108   FILE f;
109 
110   f._flags = __SWR | __SSTR;
111   f._bf._base = f._p = (unsigned char *) str;
112   f._bf._size = f._w = INT_MAX;
113   f._file = -1;  /* No file. */
114   va_start (ap, fmt);
115   ret = svfiprintf ( &f, fmt, ap);
116   va_end (ap);
117   *f._p = 0;
118   return (ret);
119 }
120