99d6683e197650896a1ce2de6dc232fa6a39f273
[people/xl0/gpxe.git] / src / include / vsprintf.h
1 #ifndef VSPRINTF_H
2 #define VSPRINTF_H
3
4 /** @file
5  *
6  * printf() and friends
7  *
8  * Etherboot's printf() functions understand the following subset of
9  * the standard C printf()'s format specifiers:
10  *
11  *      - Flag characters
12  *              - '#'           - Alternate form (i.e. "0x" prefix)
13  *              - '0'           - Zero-pad
14  *      - Field widths
15  *      - Length modifiers
16  *              - 'hh'          - Signed / unsigned char
17  *              - 'h'           - Signed / unsigned short
18  *              - 'l'           - Signed / unsigned long
19  *              - 'll'          - Signed / unsigned long long
20  *              - 'z'           - Signed / unsigned size_t
21  *      - Conversion specifiers
22  *              - 'd'           - Signed decimal
23  *              - 'x','X'       - Unsigned hexadecimal
24  *              - 'c'           - Character
25  *              - 's'           - String
26  *              - 'p'           - Pointer
27  *
28  * Hexadecimal numbers are always zero-padded to the specified field
29  * width (if any); decimal numbers are always space-padded.  Decimal
30  * long longs are not supported.
31  *
32  */
33
34 #include <stdarg.h>
35
36 #define PRINTF_NO_LENGTH ( ( size_t ) -1 )
37
38 extern int vsnprintf ( char *buf, size_t size, const char *fmt, va_list args );
39 extern int vprintf ( const char *fmt, va_list args );
40
41 extern int __attribute__ (( format ( printf, 3, 4 ) ))
42 snprintf ( char *buf, size_t size, const char *fmt, ... );
43
44 extern int __attribute__ (( format ( printf, 1, 2 ) ))
45 printf ( const char *fmt, ... );
46
47 /**
48  * Write a formatted string to a buffer
49  *
50  * @v buf               Buffer into which to write the string
51  * @v fmt               Format string
52  * @v ...               Arguments corresponding to the format string
53  * @ret len             Length of formatted string
54  */
55 #define sprintf( buf, fmt, ... ) \
56         snprintf ( (buf), PRINTF_NO_LENGTH, (fmt), ## __VA_ARGS__ )
57
58 /**
59  * Write a formatted string to a buffer
60  *
61  * @v buf               Buffer into which to write the string
62  * @v fmt               Format string
63  * @v args              Arguments corresponding to the format string
64  * @ret len             Length of formatted string
65  */
66 static inline int vsprintf ( char *buf, const char *fmt, va_list args ) {
67         return vsnprintf ( buf, PRINTF_NO_LENGTH, fmt, args );
68 }
69
70 #endif /* VSPRINTF_H */