blob: 7b9aea06876d7e226e77f3a6e8ffdfb516aa2f9d [file] [log] [blame]
Heinrich Schuchardtf5e90352022-01-19 01:20:45 +01001.. SPDX-License-Identifier: GPL-2.0+
2
3Printf() format codes
4=====================
5
6Each conversion specification consists of:
7
8* leading '%' character
9* zero or more flags
10* an optional minimum field width
11* an optional precision field preceded by '.'
12* an optional length modifier
13* a conversion specifier
14
15Flags
16-----
17
18'space'
19 fill up with spaces to reach the specified length
20
21\-
22 left justify
23
24\+
25 add sign field of decimal conversion
26
27#
28 convert to alternative form
29
30 * prepend 0 to octal output
31 * ignored for decimal output
32 * prepend 0X to hexadecimal output
33
340
35 fill up with zeroes to reach the specified length
36
37
38Integer types
39-------------
40
41Length modifiers
42''''''''''''''''
43
44The optional length modifier specifies the size of the argument.
45
46no modifier
47 bool, enum, short, int are passed as int
48
49%h
50 convert to (unsigned) short before printing.
51 Only the low 16 bits are printed.
52
53%hh
54 **not implemented**
55
56%j
57 **not implemented**
58
59%l
60 long
61
62%ll, %L
63 long long
64
65%t
66 ptr_diff_t
67
68%z, %Z
69 size_t, ssize_t
70
71Conversion specifiers
72'''''''''''''''''''''
73
74Conversion specifiers control the output.
75
76%d
77 signed decimal
78
79%u
80 unsigned decimal
81
82%o
83 unsigned octal
84
85%x
86 unsigned lower case hexadecimal
87
88%X
89 unsigned upper case hexadecimal
90
91The floating point conversion specifiers are not implemented:
92
93* %a
94* %A
95* %e
96* %E
97* %f
98* %F
99* %g
100* %G
101
102The following tables shows the correct combinations of modifiers and specifiers
103for the individual integer types.
104
105=================== ==================
106Type Format specifier
107=================== ==================
108bool %d, %x
109char %d, %x
110unsigned char %u, %x
111short %d, %x
112unsigned short %u, %x
113int %d, %x
114unsigned int %d, %x
115long %ld, %lx
116unsigned long %lu, %lx
117long long %lld, %llx
118unsigned long long %llu, %llx
119off_t %llu, %llx
120ptr_diff_t %td, %tx
121fdt_addr_t %pa, see pointers
122fdt_size_t %pa, see pointers
123phys_addr_t %pa, see pointers
124phys_size_t %pa, see pointers
125resource_size_t %pa, see pointers
126size_t %zu, %zx, %zX
127ssize_t %zd, %zx, %zX
128=================== ==================
129
130Characters
131----------
132
133%%
134 a '%' character is written
135
136%c
137 prints a single character
138
139%lc
140 **not implemented**
141
142Strings
143-------
144
145%s
146 prints a UTF-8 string (char \*)
147
148%ls
149 prints a UTF-16 string (u16 \*)
150
151Pointers
152--------
153
154%p
155 prints the address the pointer points to hexadecimally
156
157%pa, %pap
158 prints the value of a phys_addr_t value that the pointer points to
159 preceded with 0x and zero padding according to the size of phys_addr_t.
160 The following types should be printed this way:
161
162 * fdt_addr_t
163 * fdt_size_t
164 * phys_addr_t
165 * phys_size_t
166 * resource_size_t
167
168%pD
169 prints a UEFI device path
170
171%pi4, %pI4
172 prints IPv4 address, e.g. '192.168.0.1'
173
174%pm
175 prints MAC address without separators, e.g. '001122334455'
176
177%pM
178 print MAC address colon separated, e.g. '00:01:02:03:04:05'
179
180%pUb
181 prints GUID big endian, lower case
182 e.g. '00112233-4455-6677-8899-aabbccddeeff'
183
184%pUB
185 prints GUID big endian, upper case
186 e.g. '00112233-4455-6677-8899-AABBCCDDEEFF'
187
188%pUl
189 prints GUID little endian, lower case
190 e.g. '33221100-5544-7766-8899-aabbccddeeff'
191
192%pUL
193 prints GUID little endian, upper case
194 e.g. '33221100-5544-7766-8899-AABBCCDDEEFF'
195
196%pUs
197 prints text description of a GUID or if such is not known little endian,
198 lower case, e.g. 'system' for a GUID identifying an EFI system
199 partition.